【问题标题】:HttpRequest is making me upset [duplicate]HttpRequest让我心烦[重复]
【发布时间】:2013-06-11 00:08:31
【问题描述】:

我试图在 java 上使用 HttpRequest 方法,但它不起作用,这是我的代码

package com.example.phpconnect;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import android.util.Log;

public class httpHandler {

public String post(String posturl){

    try{
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(posturl);
        Log.w("Se envio","Fase 1");

        HttpResponse resp = httpclient.execute(httppost);
        HttpEntity ent = resp.getEntity();          
        Log.w("Se envio","Fase 2");

        String text = EntityUtils.toString(ent);
        Log.w("Se envio","Fase 3");
        return text;
    }
    catch(Exception e){
        Log.w("Se envio","Error");
        return "Error";
    }

}

}

它在第一个日志之前工作正常,然后它抛出错误,请有人知道问题出在哪里?谢谢!

【问题讨论】:

  • 关于异常是什么的一些细节怎么样,比如堆栈跟踪。没有那个就很难搞清楚。
  • 我不明白,我只有那个代码,还有我的 MainActivity,我也必须发布那个代码吗?
  • 在您的 catch 块中,您需要记录来自 Exception e 的堆栈跟踪。我不是 android 人,但通常情况下,您只需执行 e.printStackTrace,这将转到 System.out。如果你不能这样做,至少记录来自Exception 的消息,如下所示:Log.w(e.getMessage());
  • 在查看 android Log API 文档时,您可以像这样记录堆栈跟踪:Log.w("httpHandler", e);
  • 看不到错误日志,但我敢打赌您传递的 URL 无效。它应该被编码。一种方法是URI.encode(string)。哦,喜欢这个标题:)

标签: java android httprequest httpresponse


【解决方案1】:

当应用程序尝试在其主线程上执行网络操作时,会引发 NetworkOnMainThreadException。

正如@EJP 在评论中正确指出的那样,将尝试详细说明。

HTTP Post 请求不应在主线程中执行。它需要在后台运行,为此您可以使用AsyncTask 并在doInBackground() 中执行它。

More details on Exception!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-29
    • 2023-03-09
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    相关资源
    最近更新 更多