先说一下实现效果,写了帮助类之后,可以在Activity中将请求键值对放入一个map中,把map、url和其它一些你所需要添加的参数添加到帮助类的构造方法中,然后在Activity中重写网络请求帮助类中的抽象方法即可。
这里只拿get请求和完整的url打个比方(post不测试、map拼接String先不做)l,等我整理好之后会给伸手党整理一份完整的get/post帮助类(http://blog.csdn.net/u014727233/article/details/51237001)
大致原理就是在帮助类中传入url、参数,再声明请求成功/失败要执行的方法,然后帮助类调用doGet/doPost开始工作线程网络请求,并在请求结束后,调用抽象方法;
在Activity中,只要新建帮助类对象并实现请求完成后的抽象方法即可。
以下是测试中的帮助类的代码:
public abstract class LmxHttpClient{
public Context context;
public String url;
public int timeOut;
public HashMap<String,String> param_map;
public LmxHttpClient(String url, int timeOut,
HashMap<String, String> param_map) {
super();
this.url = url;
this.timeOut = timeOut;
this.param_map = param_map;
}
public abstract void onRequestSuccess(String json);
public abstract void onRequestFailure(String json);
public void doGet(){
final String get_url=url;
final int get_timeOut=timeOut;
final HashMap<String,String> get_paramMap;
final Context get_context=context;
new Thread(){
public void run() {
try {
HttpClient client=new DefaultHttpClient();
HttpGet get=new HttpGet(get_url);
HttpResponse resp=client.execute(get);
HttpEntity entity=resp.getEntity();
String json=EntityUtils.toString(entity);
onRequestSuccess(json);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}.start();
}
}
以下是Activity中,传入url和网络参数等参数、实现抽象方法doGet,注意抽象方法在帮助类中是工作线程中执行的,记得runonuithread或者handler改ui(这里希望大神能给点意见让我能实现在帮助类中调用runonuithread的方式,这样Activity中的代码可以更简洁,我试了试传context好像不行,本人是菜..)
public class MainActivity extends Activity {
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView)findViewById(R.id.tv);
final String url="http://web.juhe.cn:8080/environment/air/cityair?city=shanghai&key=6a7a7d5ea8f88d749a00fefe7ea619";
LmxHttpClient client=new LmxHttpClient(url,0,null) {
@Override
public void onRequestSuccess(String json) {
// TODO Auto-generated method stub
final String jjson=json;
runOnUiThread(new Runnable() {
public void run() {
tv.setText(jjson);
}
});
}
@Override
public void onRequestFailure(String json) {
// TODO Auto-generated method stub
runOnUiThread(new Runnable() {
public void run() {
}
});
}
};
client.doGet();
}
}
测试接口是聚合数据的空气质量接口,key值抱歉是假的哈
以上,个人观点,实际上应该还有handler、callable+future、interface等方式吧,我试了几次都没成功,望大神轻喷