okhttp网络请求的简单示例

43 篇文章 6 订阅
18 篇文章 0 订阅

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

一.布局文件

<?xml version="1.0" encoding="utf-8"?>
<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());
            }
        });
    }


}

程序运行后显示的界面:

o1

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

o2

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

o3

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

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

峥嵘life

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值