Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpPost中为什么会发生异常?_Java_Android - Fatal编程技术网

Java HttpPost中为什么会发生异常?

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

我使用HTTP post发送值,但出现异常我的代码如下:-

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();
}