当前位置:编程学习 > wap >>

求助,HttpResponse response = http.execute(post);报错了,不会搞

,情况是这样的,网络权限是加了的,但是一运行,用logcat看到就报错到这行,还有不会捕获android的异常;请知道的朋友帮帮忙?有的说android4.0以上是要用多线程,感觉用不好,比如我一个用户登录,多线程的话怎么会返回数据来判断登陆成功没有;反正每次运行到这就报错,不会搞了,HttpResponse response = http.execute(post); android网络编程 --------------------编程问答--------------------

try{
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(img_path);
HttpResponse httpResponse = httpClient.execute(httpGet);
if(httpResponse.getStatusLine().getStatusCode()==200){
HttpEntity entity = httpResponse.getEntity();
byte[] data = EntityUtils.toByteArray(entity);
bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
handler.sendEmptyMessage(10001);
}
}catch(Exception e){
}

这个是获取网络图片的列子,你可以把data换成你想要的数据,比如stream流等 --------------------编程问答-------------------- 还有就是4.0以上不能在主线程中对网络数据的请求,于是你要重新起一个线程 --------------------编程问答--------------------
引用 2 楼 lieri111 的回复:
还有就是4.0以上不能在主线程中对网络数据的请求,于是你要重新起一个线程

怎么才能重启一个线程来做,感觉做不好,网上的教程一般都是直接写在里面的,没有去重新启用一个线程 --------------------编程问答--------------------

new Thread(new Runnable() {

@Override
public void run() {
//你的请求
}
}).start();
--------------------编程问答-------------------- 把我的代码加到4楼的"你的请求"位置 --------------------编程问答-------------------- 要么就在子线程中请求,要么加上下面这些代码
 if (Build.VERSION.SDK_INT >= 11) {
      StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
   StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());
  }
--------------------编程问答-------------------- 还是把网络操作放在子线程里做吧,这样比较好。获取到登录成功或者失败的结果以后,发个消息给UI主线程,主线程就可以处理这个消息了。 --------------------编程问答--------------------
引用 1 楼 lieri111 的回复:

try{
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(img_path);
HttpResponse httpResponse = httpClient.execute(httpGet);
if(httpResponse.getStatusLine().getStatusCode()==200){
HttpEntity entity = httpResponse.getEntity();
byte[] data = EntityUtils.toByteArray(entity);
bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
handler.sendEmptyMessage(10001);
}
}catch(Exception e){
}

这个是获取网络图片的列子,你可以把data换成你想要的数据,比如stream流等


那可以帮我看一下不,这样的例子
public static String postRequest(String url,Map<String ,String> param)throws Exception{
HttpPost post = new HttpPost(url);
//如果传递多个参数可以对传递额参数进行封装
List<NameValuePair> par = new ArrayList<NameValuePair>();
for(String key:param.keySet()){
//封装请求参数
par.add(new BasicNameValuePair(key, param.get(key)));
}
//设置请求参数
post.setEntity(new UrlEncodedFormEntity(par,"gbk"));
//发送post请求
HttpClient http = new DefaultHttpClient(); 
try {
HttpResponse response = http.execute(post);
if(response.getStatusLine().getStatusCode()==200){
String result = EntityUtils.toString(response.getEntity());
Log.v("result", "post请求成功!");
Log.v("result", result);
return result;
}
} catch (Exception e) {
e.printStackTrace();
}
//Log.v("result", "post请求失败!");
return null;
}

HttpResponse response = http.execute(post);执行到这里就报错了 --------------------编程问答--------------------
引用 4 楼 a_mean 的回复:

new Thread(new Runnable() {

@Override
public void run() {
//你的请求
}
}).start();

请问这样的线程我怎么传参数过去?我要登录啊,我用什么传递登录的用户名和密码? --------------------编程问答--------------------
引用 7 楼 tantahe 的回复:
还是把网络操作放在子线程里做吧,这样比较好。获取到登录成功或者失败的结果以后,发个消息给UI主线程,主线程就可以处理这个消息了。

这个思路非常好的,问题是我怎么去实现?用多线程的话怎么传参数呢 --------------------编程问答--------------------
引用 10 楼 xiaofengxiaoxing 的回复:
Quote: 引用 7 楼 tantahe 的回复:

还是把网络操作放在子线程里做吧,这样比较好。获取到登录成功或者失败的结果以后,发个消息给UI主线程,主线程就可以处理这个消息了。

这个思路非常好的,问题是我怎么去实现?用多线程的话怎么传参数呢

主线程里获取参数,子线程里直接用就是了。
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,