广播接收机中的HttpPost(Android≤;4.0)(异步任务?)

广播接收机中的HttpPost(Android≤;4.0)(异步任务?),android,http-post,compatibility,Android,Http Post,Compatibility,我正在构建一个应用程序,通过HttpPost将变量传递给我的服务器。在我昨天将我的安卓2.3设备升级到安卓4.0之前,一切都很顺利。更新之后,每次运行HttpPost时,我正在使用的应用程序都会崩溃。我认为,由于相同的代码在Android2.3中工作,问题在于它与更新后的系统不兼容 我传递相同变量并仍然兼容安卓2.3-4.0的最佳方式是什么?这里的最佳实践是什么?我对手机开发还比较陌生。我的方法如何 HttpClient httpClient = new DefaultHttpClient();

我正在构建一个应用程序,通过HttpPost将变量传递给我的服务器。在我昨天将我的安卓2.3设备升级到安卓4.0之前,一切都很顺利。更新之后,每次运行HttpPost时,我正在使用的应用程序都会崩溃。我认为,由于相同的代码在Android2.3中工作,问题在于它与更新后的系统不兼容

我传递相同变量并仍然兼容安卓2.3-4.0的最佳方式是什么?这里的最佳实践是什么?我对手机开发还比较陌生。我的方法如何

HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("MY URL");
 List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
  nameValuePairs.add(new BasicNameValuePair("receiver", "BLAH"));
   try {
    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
   } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
   }
   try {
    httpClient.execute(httpPost);
   } catch (ClientProtocolException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }

您需要在后台进程中运行URL请求

下面是示例代码

new TestTask().execute();

公共类TestTask扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(Void…参数){
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“我的URL”);
List nameValuePairs=新的ArrayList();
添加(新的BasicNameValuePair(“接收者”、“废话”);
试一试{
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
}捕获(不支持的编码异常e){
e、 printStackTrace();
}
试一试{
httpClient.execute(httpPost);
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
}
}

Android 3.0及更高版本不允许在主UI线程上发送网络请求。

看起来您正在主线程上运行网络任务

在异步任务中运行网络任务,这样它就不会阻塞UI线程。永远不要在UI线程中运行阻塞任务。以下是一个教程:

  • 确保您正在使用Asynctask(正如其他人提到的)
  • 您正在使用代理服务器吗?通常,如果您通过3G连接到互联网,移动运营商会在您的设备上自动设置代理服务器+端口。如果您正在使用它,请尝试清除它并再次运行应用程序

  • 我已经在4分钟前发布了!:)无需再次发布相同的答案。如果你认为答案是好的,那就投票吧。我发布链接的Android文档中对此解释得很好。通读一遍;)AsyncTasks在API级别3及更高版本上工作,这意味着它们在Android 1.5及更高版本上工作@MMohsinNaeem只是想提供一个文档参考和进一步的解释,直到现在我还没有足够的代表对你的帖子发表评论-对不起!
    new TestTask().execute();
    
    public class TestTask extends AsyncTask<Void, Void, Void>{
    
        @Override
        protected Void doInBackground(Void... params) {
    
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost("MY URL");
             List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
              nameValuePairs.add(new BasicNameValuePair("receiver", "BLAH"));
               try {
                httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
               } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
               }
               try {
                httpClient.execute(httpPost);
               } catch (ClientProtocolException e) {
                e.printStackTrace();
               } catch (IOException e) {
                e.printStackTrace();
               }
            return null;
        }
    
        }