广播接收机中的HttpPost(Android≤;4.0)(异步任务?)
我正在构建一个应用程序,通过HttpPost将变量传递给我的服务器。在我昨天将我的安卓2.3设备升级到安卓4.0之前,一切都很顺利。更新之后,每次运行HttpPost时,我正在使用的应用程序都会崩溃。我认为,由于相同的代码在Android2.3中工作,问题在于它与更新后的系统不兼容 我传递相同变量并仍然兼容安卓2.3-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();
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线程中运行阻塞任务。以下是一个教程:
我已经在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;
}
}