Android网络开发之OkHttp--基本用法GET
1、OkHttp框架使用了OkIo.jar包,不要忘记添加。
2、对于Request对象是如何实例化的,大家可以参考--java builder设计模式
http://www.cnblogs.com/moonz-wu/archive/2011/01/11/1932473.html
3、通过同步GET访问网络,主要分为四步:
(1)、声明并实例化一个OkHttpClient对象。
(2)、声明并实例化一个Request对象,并设置URL等参数。
(3)、执行Request请求,并获得一个Response对象。
(4)、根据Response的isSuccessful()方法,判断是否成功,然后从Response对象中获取返回数据。
4、通过异步GET访问网络和同步GET是一样的,不过处理返回数据实在CallBack接口中实现的。
5、
public class GetActivity extends Activity { private final OkHttpClient client = new OkHttpClient(); private TextView mTvGet; private String result; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_get); initView(); new Thread(getThread).start(); } public void initView() { mTvGet = (TextView) findViewById(R.id.tv_get_show); } private Runnable getThread = new Runnable() { public void run() { try { getRun2(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }; }; /** 同步GET */ public void getRun() throws Exception { // 实例化请求对象 Request request = new Request.Builder().url("https://www.baidu.com/").build(); // 得到返回对象 Response response = client.newCall(request).execute(); // 判断返回对象是否成功 if (!response.isSuccessful()) { result += "请求出错!"; } else { // 输出Headers Headers responseHeaders = response.headers(); for (int i = 0; i < responseHeaders.size(); i++) { result += responseHeaders.name(i) + "" + responseHeaders.value(i); } // 输出Body result += response.body().string(); } getHandler.sendEmptyMessage(0); } /** 异步GET */ public void getRun1() throws Exception { Request request = new Request.Builder().url("https://www.baidu.com/").build(); client.newCall(request).enqueue(new Callback() { @Override public void onResponse(Response response) throws IOException { // 判断返回对象是否成功 if (!response.isSuccessful()) { result += "请求出错!"; } else { // 输出Headers Headers responseHeaders = response.headers(); for (int i = 0; i < responseHeaders.size(); i++) { result += responseHeaders.name(i) + "" + responseHeaders.value(i); } // 输出Body result += response.body().string(); } getHandler.sendEmptyMessage(0); } @Override public void onFailure(Request arg0, IOException e) { // TODO Auto-generated method stub e.printStackTrace(); } }); } private Handler getHandler = new Handler() { public void handleMessage(Message msg) { mTvGet.setText(result); }; }; }
6、访问网络不能在主线程中进行,还有不要忘记加入访问网络的权限。
<uses-permission android:name="android.permission.INTERNET" />
7、参考博文:
http://www.2cto.com/kf/201505/397557.html