okhttp网络请求的简单示例

      okhttp网络请求的功能还是比较强大的。
      这里这是简单的演示:字符串数据的请求和json数据的请求。
      AndroidStudio使用Okhttp之前添加依赖就可以了:
compile ‘com.squareup.okhttp3:okhttp:3.5.0’
      GitHub中的源码地址:https://github.com/square/okhttp
一般要了解它的源码地址,作用,类和使用方法, 依赖的版本是会更新的。

一.布局文件


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
 >

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="net1"
        android:text="get请求方法" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="net2"
        android:text="post键值对请求" />


LinearLayout>

      这里设计两个按钮,第一个按钮用来请求网页的源码数据,第二个按钮用来请求ShowAPI中的json数据。

二.请求数据的具体操作

package com.lwz.okhttp;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;


/***
 * 演示OkHttp网络框架的使用
 * OkHttp是用于网络请求数据的一个网络框架工具
 */
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /**
     * get请求方式
     * 请求百度网页的源码数据
     */
    public void net1(View view) {
        //创建网络处理的对象
        OkHttpClient client = new OkHttpClient.Builder()
                //设置读取数据的时间
                .readTimeout(5, TimeUnit.SECONDS)
                //对象的创建
                .build();
        //创建一个网络请求的对象,如果没有写请求方式,默认的是get
        //在请求对象里面传入链接的URL地址
        Request request = new Request.Builder()
                .url("https://www.baidu.com").build();

        //call就是我们可以执行的请求类
        Call call = client.newCall(request);
        //异步方法,来执行任务的处理,一般都是使用异步方法执行的
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                //失败
                Log.e(“TAG”,Thread.currentThread().getName() + "结果  " + e.toString());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //成功
                //子线程
                //main thread1
               Log.e(“TAG”,Thread.currentThread().getName() + "结果  " + response.body().string());
            }
        });
        //  call.cancel();取消任务

        //同步方法,一般不用
       /* try {
            Response execute = call.execute();
        } catch (IOException e) {
            e.printStackTrace();
        }*/
    }

    /**
     * post请求方式,请求网络数据
     * 请求ShowAPI里面的json数据
     */
    public void net2(View view) {
        //创建网络处理的对象
        OkHttpClient client = new OkHttpClient.Builder()
                .readTimeout(5, TimeUnit.SECONDS)
                .build();

        //post请求来获得数据
        //创建一个RequestBody,存放重要数据的键值对
        RequestBody body = new FormBody.Builder()
                .add("showapi_appid", "13074")
                .add("showapi_sign", "ea5b4bf2e140498bb772d1bf2a51a7a0").build();
        //创建一个请求对象,传入URL地址和相关数据的键值对的对象
        Request request = new Request.Builder()
                .url("http://route.showapi.com/341-3")
                .post(body).build();

        //创建一个能处理请求数据的操作类
        Call call = client.newCall(request);

        //使用异步任务的模式请求数据
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.e(“TAG”,"错误信息:" + e.toString());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
               Log.e(“TAG”,response.body().string());
            }
        });
    }


}

程序运行后显示的界面:

okhttp网络请求的简单示例_第1张图片

点击第一个按钮请求到百度的网页的源码数据html格式,Log信息:

o2

点击第二个按钮请求到ShowAPI中的json数据,Log信息:

okhttp网络请求的简单示例_第2张图片

      这里第二个按钮的用途,是我们经常要使用到的,获得json数据后,再通过(gson解析工具类)json解析,获取到json对象,最后获取到json数据里面,我们需要的数据。

你可能感兴趣的:(网络框架,android,Android网络)