【问题标题】:android HTTP POST error安卓 HTTP POST 错误
【发布时间】:2015-03-25 08:10:59
【问题描述】:

好的,所以我在一个新类中创建了一个方法,并从我在 try catch 块中的活动中调用它,当我调用它并传递我的字符串值时,我的问题出现了......

我的问题是在执行以下方法后开始的:

HttpResponse httpresponse = httpclient.execute(httppostreq);

它在我的活动中被捕获(IOException e),当我尝试打印响应字符串时,它给了我来自服务器的响应!!!!

所以问题是当我尝试将值传递给 POST 时,它应该返回一些数据,但它失败了,它从服务器返回了空消息

提示: 如果没有值,则会出现空消息

jsonobj.put("screenType", requestString);

那么我是否传递了值???以及为什么会导致异常??

public void postData(String requestString) throws JSONException, ClientProtocolException, IOException {

    // Create a new HttpClient and Post Header
    DefaultHttpClient httpclient = new DefaultHttpClient();
    JSONObject jsonobj = new JSONObject();
    jsonobj.put("screenType", requestString);
    //jsonobj.put("old_passw", "306");
    HttpPost httppostreq = new HttpPost("mysite.org");
    StringEntity se = new StringEntity(jsonobj.toString());
    se.setContentType("application/json;charset=UTF-8");
    se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json;charset=UTF-8"));
    httppostreq.setEntity(se);
    HttpResponse httpresponse = httpclient.execute(httppostreq);

    Log.i("in try", httpresponse.toString());
    String responseText=null;

    try {

        responseText=EntityUtils.toString(httpresponse.getEntity());
    } catch (Exception e) {

        // TODO: handle exception
        e.printStackTrace();
        Log.i("in Exception",e.toString());
        Log.i("arse exception", httpresponse.toString());
    }
} 

我还添加了互联网权限

<uses-permission android:name="android.permission.INTERNET" />

【问题讨论】:

    标签: android post httprequest


    【解决方案1】:

    您不能在主线程上发出网络请求。你会得到你现在看到的错误。您需要使用 AsyncTask 或者您需要创建一个新线程。就个人而言,我会使用 AsyncTask。当您使用 AsyncTask 时,您可以使用 onPostExecute 方法将值返回给主线程。

    见:NetworkOnMainThreadException

    【讨论】:

    • 我没有在我的第一个活动中调用它,它是第二个活动
    • 如果你在主线程上调用,你会发现一个错误。您必须在后台进行调用(例如 AsynTaskLoader)
    • 在我的 firat 活动中,我有一个按钮,当用户单击它时,它将打开相机以读取条形码,然后从那里打开另一个活动,并在 on create 方法中发送请求在具有布局的活动中发送它是错误的???
    【解决方案2】:

    正如 vincent 所说,您不能在 UI 线程中执行网络请求,它会给您一个奇怪的异常,但与其使用 AsyncTask,如果您的活动像 Infographic 所示那样旋转,它将被销毁,我可以推荐你可以使用Robospice,它是我用过的最好的网络框架,而且非常容易使用,祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-27
      • 2016-04-24
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多