java.io.FileNotFoundException 在 getInputStream() 上
java.io.FileNotFoundException on getInputStream()
我正在尝试从 URL 获取 InputStream,连接响应代码是 200
,但是当我尝试获取 InputStream 时出现异常 FileNotFoundException
,这是我的代码:
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[=12=]0(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.call(AsyncTask.java:295)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err: at android.os.AsyncTask$SerialExecutor.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)
有什么问题,如何调试?
The connection response code is 200
不,不是。此代码中没有检查响应代码的内容。 FileNotFoundException
表示响应代码为 404。
注意 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 的实现代码存在一些问题。
我正在尝试从 URL 获取 InputStream,连接响应代码是 200
,但是当我尝试获取 InputStream 时出现异常 FileNotFoundException
,这是我的代码:
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[=12=]0(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.call(AsyncTask.java:295)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err: at android.os.AsyncTask$SerialExecutor.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)
有什么问题,如何调试?
The connection response code is 200
不,不是。此代码中没有检查响应代码的内容。 FileNotFoundException
表示响应代码为 404。
注意 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 的实现代码存在一些问题。