zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Git 常用命令 Better
    HTTP Cookie 总结 Better
    clientWidth, offsetWidth, scrollWidth的区别 Better
    Math.round() 0.5时的特殊性 Better
    screenY、pageY、clientY、offsetY的区别 Better
    Oracle 数据快速导出工具:sqluldr2
    使用 barman的备份和归档PostgreSQL
    Android RK 内置应用 不可卸载
    AS SerialPort 编译依赖库
    RK 看门狗 WatchDog
  • 原文地址:https://www.cnblogs.com/begin1949/p/4927494.html
Copyright © 2011-2022 走看看