Android网络开发之OkHttp--基本用法GET

1、OkHttp框架使用了OkIo框架,不要忘记下OkIo.jar

2、通过同步GET访问网络,主要分为四步:

(1)、声明并实例化一个OkHttpClient对象。

(2)、声明并实例化一个Request对象,并设置URL等参数。

(3)、执行Request请求,并获得一个Response对象。

(4)、根据Response的isSuccessful()方法,判断是否成功,然后从Response对象中获取返回数据。

3、通过异步GET访问网络和同步GET是一样的,不过处理返回数据实在CallBack接口中实现的。

4、

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);
        };
    };
}

5、访问网络不能在主线程中进行,还有不要忘记加入访问网络的权限。

<uses-permission android:name="android.permission.INTERNET" />

6、参考博文:

http://www.2cto.com/kf/201505/397557.html

http://blog.csdn.net/lmj623565791/article/details/47911083

7、对于Request对象是如何实例化的,大家可以参考--java builder模式

http://www.cnblogs.com/moonz-wu/archive/2011/01/11/1932473.html

时间: 2024-10-11 00:06:16

Android网络开发之OkHttp--基本用法GET的相关文章

Android网络开发之OkHttp--基本用法POST

1.OkHttp框架使用了OkIo框架,不要忘记下OkIo.jar 2.通过POST访问网络,和通过GET访问网络基本相同,多了设置请求参数的过程.主要分为五步: (1).声明并实例化一个OkHttpClient对象 (2).声明并实例化一个RequestBody对象 (3).声明并实例化一个Request对象 (4).执行Request请求,并得到一个Response对象 (5).根据Response的isSuccessful()方法判断是否成功,然后从Response对象中获取返回数据. 3

Android网络开发之Volley--Volley基本用法(三)

1.ImageRequest用法和StringRequest一样,主要分为3步: (1).实例化一个RequestQueue对象 (2).设置ImageRequest对象参数,并将ImageRequest对象加入RequestQueue队列 (3).执行start()方法 2.ImageLoader用法 (1).实例化一个RequestQueue对象 (2).实例化一个ImageLoader对象 (3).实例化一个ImageListener对象 (4).执行ImageLoader对象的get()

Android网络开发之Volley--Volley基本用法(一)

1.StringRequest用法 主要分为3步: (1).实例化一个RequestQueue对象 (2).设置StringRequest对象参数,并将StringRequest对象加入RequestQueue队列 (3).执行start()方法 public class StringActivity extends Activity { private TextView mTvShow; private RequestQueue requestQueue; @Override protecte

Android网络开发之OkHttp--基本用法实例化各个对象

1.实例化OkHttpClient对象,OkHttpClient包含了以下属性,以及set()和get()方法.但并没有包含具体的执行方法,详情见源码. //实例化OkHttpClent对象 private OkHttpClient client = new OkHttpClient(); private static SSLSocketFactory defaultSslSocketFactory; private final RouteDatabase routeDatabase; priv

Android网络开发之用tcpdump抓包

Android开发过程中,当涉及到网络通信的时候,有一些字段需要抓包获取.我之前因为SSDP设备发现的包头格式没有写对,经过抓包分析和标准包头对比发现了这个困扰我很久的问题.总之,掌握在Android手机里面抓包是很有必要的. 准备工作:Android系统的手机,网络环境,tcpdump,破解手机root权限,建议最好在手机里面安装RE文件管理器并且给root权限.具体步骤如下: 首先,通过adb工具将tcpdump推送到手机,tcpdump的下载地址为:http://www.strazzere

Android网络开发之WIFI

WIFI就是一种无线联网技术,常见的是使用无线路由器.那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网.如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为"热点".        在Android中对Wifi操作,android本身提供了一些有用的包,在android.net.wifi包下面,主要包括以下几个类和接口:   1.ScanResult    主要用来描述已经检测出的接入点,包括接入点的地址,接入点的名称,身份认证,频率,信号强度等信

android开发之synchronized的用法

android开发之synchronized的用法 在android开发中synchronized主要有四种用法.第一是在方法声明时使用:第二是在对某一代码块时使用:第三是对某一对象使用:第四是对某一类使用.具体的实现代码如下: 1.方法声明时使用 放在范围操作符(public等)之后,返回类型声明(void等)之前.这时,线程获得的是成员锁,即一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等候,当前线程(就是在synchronized方法内部的线程)执行完该方法后,别的线

Android 安全开发之 ZIP 文件目录遍历

1.ZIP文件目录遍历简介 因为ZIP压缩包文件中允许存在"../"的字符串,攻击者可以利用多个"../"在解压时改变ZIP包中某个文件的存放位置,覆盖掉应用原有的文件.如果被覆盖掉的文件是动态链接so.dex或者odex文件,轻则产生本地拒绝服务漏洞,影响应用的可用性,重则可能造成任意代码执行漏洞,危害用户的设备安全和信息安全.比如近段时间发现的"寄生兽"漏洞.海豚浏览器远程命令执行漏洞.三星默认输入法远程代码执行漏洞等都与ZIP文件目录遍历有

Android快速开发之appBase——(6).HttpReq和APICloudSDK

Android快速开发之appBase--(6).HttpReq和APICloudSDK HttpReq和APICloudSDK都是网络请求组件,都是基于xUtils的HttpUtils重新封装的.接下来讲一下使用方法. 1.HttpReq 看以看到有这么几个方法 GET:GET方式请求 POST:普通的POST表单提交 POST:将数据以流的形式传递 /** * POST请求,用InputStream的方式传递请求参数 * * @param api * 接口地址 * @param reques