Java HttpPost中为什么会发生异常?
我使用HTTP post发送值,但出现异常我的代码如下:-Java HttpPost中为什么会发生异常?,java,android,Java,Android,我使用HTTP post发送值,但出现异常我的代码如下:- public static InputStream SendDetails(String senderEmail,String senderName,String senderPhone,String comment ) { if(item != null) { url = constants.STATEURL + item.getListingid().toString()+"/con
public static InputStream SendDetails(String senderEmail,String senderName,String senderPhone,String comment )
{
if(item != null)
{
url = constants.STATEURL + item.getListingid().toString()+"/contact";//?access_token=0|V1CALGARY|e98984a4c954fa1d78e3be626ad81a1d&mode=map";
}
else if(itemsavedfromdb != null)
{
url = constants.STATEURL + itemsavedfromdb.getListingid().toString()+"/contact";//?access_token=0|V1CALGARY|e98984a4c954fa1d78e3be626ad81a1d&mode=map";
}
else if(itemrecentfromdb != null)
{
url = constants.STATEURL + itemrecentfromdb.getListingid().toString()+"/contact";//?access_token=0|V1CALGARY|e98984a4c954fa1d78e3be626ad81a1d&mode=map";
}
List<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>();
nameValuePairs.add(new BasicNameValuePair("access_token",constants.accesstokenstate));
nameValuePairs.add(new BasicNameValuePair("mode","map"));
nameValuePairs.add(new BasicNameValuePair("senderEmail",senderEmail));
nameValuePairs.add(new BasicNameValuePair("senderName",senderName));
nameValuePairs.add(new BasicNameValuePair("senderPhone",senderPhone));
nameValuePairs.add(new BasicNameValuePair("comment",comment));
HttpPost request = new HttpPost(url);
request.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(request);
return response.getEntity().getContent();
上述代码中出现异常,导致数据无法成功发送
以下是stacktrace:-
07-03 09:02:15.264: WARN/System.err(491): java.io.IOException: Attempted read on closed stream.
07-03 09:02:15.275: WARN/System.err(491): at org.apache.http.conn.EofSensorInputStream.isReadAllowed(EofSensorInputStream.java:127)
07-03 09:02:15.275: WARN/System.err(491): at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:176)
07-03 09:02:15.275: WARN/System.err(491): at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:516)
07-03 09:02:15.275: WARN/System.err(491): at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:479)
07-03 09:02:15.275: WARN/System.err(491): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:318)
07-03 09:02:15.275: WARN/System.err(491): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:275)
07-03 09:02:15.275: WARN/System.err(491): at com.rentfaster.home.PropertyDetail.onClick(PropertyDetail.java:1623)
07-03 09:02:15.275: WARN/System.err(491): at java.lang.reflect.Method.invokeNative(Native Method)
07-03 09:02:15.275: WARN/System.err(491): at java.lang.reflect.Method.invoke(Method.java:507)
07-03 09:02:15.275: WARN/System.err(491): at android.view.View$1.onClick(View.java:2139)
07-03 09:02:15.284: WARN/System.err(491): at android.view.View.performClick(View.java:2485)
07-03 09:02:15.284: WARN/System.err(491): at android.view.View$PerformClick.run(View.java:9080)
07-03 09:02:15.284: WARN/System.err(491): at android.os.Handler.handleCallback(Handler.java:587)
07-03 09:02:15.284: WARN/System.err(491): at android.os.Handler.dispatchMessage(Handler.java:92)
07-03 09:02:15.284: WARN/System.err(491): at android.os.Looper.loop(Looper.java:130)
07-03 09:02:15.284: WARN/System.err(491): at android.app.ActivityThread.main(ActivityThread.java:3683)
07-03 09:02:15.284: WARN/System.err(491): at java.lang.reflect.Method.invokeNative(Native Method)
07-03 09:02:15.284: WARN/System.err(491): at java.lang.reflect.Method.invoke(Method.java:507)
07-03 09:02:15.284: WARN/System.err(491): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-03 09:02:15.294: WARN/System.err(491): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-03 09:02:15.294: WARN/System.err(491): at dalvik.system.NativeStart.main(Native Method)
我的convertStreamToString方法如下:-
private static String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return sb.toString();
}
任何人都可以告诉我哪里错了,什么是正确的方法。好的,将代码从
xr.parse(new InputSource(ios));
到
您正在将输入流传递给convertStreamToString方法,并且正在关闭该方法中输入流的同一实例。在该方法之后,仍然使用流的相同实例。这就是为什么你会得到这个例外 在convertStreamToString方法中创建输入流的一个局部变量,如下所示
private static String convertStreamToString(InputStream is) {
InputStream inputStream = is;
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return sb.toString();
}
试试这个。阅读我关于在单独线程上执行网络连接的博客文章。将请求包装在
异步任务
或线程
中通常可以解决此问题。它还使你的应用程序响应更快,更不容易出现强制关闭对话框
您是否在单独的
线程上执行HTTP请求?一个AsyncTask
?不,它在methodos中。你在安卓3.0+上测试吗?您测试的是哪个版本?google nexus 4.0版本请更正我在将代码放入堆栈溢出之前写的这一行,因此这不会是异常的原因…删除这一行后,没有任何影响。出现异常。请建议我。控制台中是否有任何输出?我是指您打印的流。“convertStreamToString”方法是否成功地将流转换为字符串?如果是这样,则流在finally块中关闭,您无法再读取它。但是,您可以使用从原始“ios”转换的字符串新建InputStream并读取它。是的,我以-okI的形式获得了转换流。我已经阅读了您的帖子,尝试搜索我的问题,但无法获得任何其他链接?创建一个扩展AsyncTask
的类。。。在doInBackground
中执行HTTP请求。这足以将请求卸载到一个单独的线程。thanx为了您的响应,让我试试。
InputStream input = new ByteArrayInputStream(strResponse.getBytes());
xr.parse(new InputSource(input));
private static String convertStreamToString(InputStream is) {
InputStream inputStream = is;
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return sb.toString();
}