android封装网络请求

先说一下实现效果,写了帮助类之后,可以在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等方式吧,我试了几次都没成功,望大神轻喷

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值