java.io.FileNotFoundException для getInputStream()

Я пытаюсь получить getInputStream из URL, код ответа подключения 200, но я получаю исключение FileNotFoundException когда я пытаюсь получить getInputStream, вот мой код:

url = new URL("http://...");
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestMethod("POST");
int status = connection.getResponseCode();
if(status >= 400){
    request = new OutputStreamWriter(connection.getOutputStream());
    request.write(params);
    request.flush();
    request.close();
    String line;
    InputStreamReader isr = new InputStreamReader(connection.getInputStream());
    BufferedReader reader = new BufferedReader(isr);
    StringBuilder sb = new StringBuilder();
    while ((line = reader.readLine()) != null) {
        sb.append(line + "\n");
    }
}

трассировка стека:

W/System.err: java.io.FileNotFoundException: http://...
W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:238)
W/System.err:     at com.apps.topinformers.sharedreading.AddGroupMembersFragment.postText(AddGroupMembersFragment.java:112)
W/System.err:     at com.apps.topinformers.sharedreading.AddGroupMembersFragment.access$000(AddGroupMembersFragment.java:26)
W/System.err:     at com.apps.topinformers.sharedreading.AddGroupMembersFragment$PostDataAsyncTask.doInBackground(AddGroupMembersFragment.java:65)
W/System.err:     at com.apps.topinformers.sharedreading.AddGroupMembersFragment$PostDataAsyncTask.doInBackground(AddGroupMembersFragment.java:55)
W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:295)
W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
W/System.err:     at java.lang.Thread.run(Thread.java:818)

В чем проблема, и как я могу ее отладить?

2 ответа

Решение

Код ответа соединения 200

Нет, это не так. В этом коде нет ничего, что проверяло бы код ответа. FileNotFoundException означает код ответа 404.

NB setDoOutput(true) устанавливает метод POST. Вам не нужно устанавливать это самостоятельно,

С кредитами на @EJP я проверил ответ следующим образом:

url = new URL("http://...");
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestMethod("POST");

request = new OutputStreamWriter(connection.getOutputStream());
request.write(params);
request.flush();
request.close();
String line;

int status = connection.getResponseCode();
if(status < 400) {

    InputStreamReader isr = new InputStreamReader(connection.getInputStream());
    ...
} else{
    InputStreamReader isr = new InputStreamReader(connection.getErrorStream());
    ...
}

поток ошибок показал мне, что есть некоторые проблемы с кодом реализации URL, который я запрашиваю.

Другие вопросы по тегам