Okhttp记录

OkHttp支持同步和异步两种请求方式。
同步请求是阻塞执行的,当请求发送后,必须等待服务器响应信息到达后才能继续执行下面的代码。在多线程环境下,若在主线程上请求网络操作,这样的操作会阻塞主线程,导致界面无响应,用户体验不好。
异步请求是非阻塞执行的,请求发送后不必等待服务器响应信息,可以继续执行下面的代码。当服务器响应信息到达后,会回调指定的回调函数,执行回调函数里面的逻辑。异步请求不会阻塞主线程,不会导致界面无响应,用户体验好。因此,在多线程环境下,建议使用异步请求,以保证界面的响应速度。在单线程环境下,如果不需要进行界面交互,则可以使用同步请求。

本地导入jar包:

  implementation fileTree(includes: ['*.aar','*.jar'],dir: 'libs')

网络权限:

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

//get请求
    public void get(){
        OkHttpClient okHttpClient=new OkHttpClient.Builder()

                .connectTimeout(15, TimeUnit.SECONDS)
                .readTimeout(20,TimeUnit.SECONDS)
                .writeTimeout(20,TimeUnit.SECONDS)

                .retryOnConnectionFailure(true)

                .build();

        Request.Builder builder=new Request.Builder();

        Request request=builder.get().url("http://api.txapi.cn/v1/hitokoto?token=W0YtctWjTMYzM").build();
        Call call=okHttpClient.newCall(request);

        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {
                Toast.makeText(MainActivity.this, "失败了", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                s=response.body().string();
                try {
                    JSONObject jo=new JSONObject(s);
                    JSONObject jo1=jo.getJSONObject("data");
                    text.setText(jo1.getString("content"));
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        });

    }
}
//post请求
public void post(){
        OkHttpClient okHttpClient=new OkHttpClient.Builder()
                .connectTimeout(15, TimeUnit.SECONDS)
                .readTimeout(20,TimeUnit.SECONDS)
                .writeTimeout(20,TimeUnit.SECONDS)
                .retryOnConnectionFailure(true)
                .build();

        RequestBody fromBody=new FormBody.Builder()
                .add("ip","124.93.196.45")
                .add("token","W0YtctWjTMYzM")
                .build();
        Request.Builder builder=new Request.Builder();

        Request request=builder.get().url("http://api.txapi.cn/v1/ip_location").addHeader("token","").post(fromBody).build();
        Call call=okHttpClient.newCall(request);

        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {
                Toast.makeText(MainActivity.this, "失败了", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                s=response.body().string();
                try {
                    JSONObject jo=new JSONObject(s);
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        });

    }

//get请求
OkHttpClient c=new OkHttpClient();

//get请求___只能在子线程
    private String geturl(String url)throws IOException{
        Request request =new Request.Builder()
                                    .url(url)
                                    .build();
        Response response=c.newCall(request).execute();
        return  response.body().string();
    }

 class k implements Runnable{
            @Override
            public void run() {
                try {
                    Message m=Message.obtain();
                    m.what=1;
                    m.obj=geturl("http://api.m.mtime.cn/PageSubArea/TrailerList.api");
                    handler.sendMessage(m);
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }

    }
//post请求
  OkHttpClient c=new OkHttpClient();
 class k implements Runnable{
        @Override
        public void run() {
            try {
                Message m=Message.obtain();
                m.what=1;
                m.obj=posturl("http://api.m.mtime.cn/PageSubArea/TrailerList.api","");
                handler.sendMessage(m);
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

    }

    public  static  final MediaType JSON
            =MediaType.parse("application;charset=utf-8");


    private String posturl(String url,String json)throws IOException{
       RequestBody body=RequestBody.create(JSON,json);
        Request request =new Request.Builder()
                .url(url)
                .post(body)
                .build();
        Response response=c.newCall(request).execute();
        return  response.body().string();
    }

Handler代码:

private Handler handler=new Handler(){
    @Override
    public void dispatchMessage(@NonNull Message msg) {
        super.dispatchMessage(msg);
        switch (msg.what){
            case  1:
                //获取数据
                text.setText((String)msg.obj);
                w.loadData((String)msg.obj,"text/html","UTF-8");
                Toast.makeText(MainActivity.this, "子线程运行完毕", Toast.LENGTH_SHORT).show();
                break;
        }
    }
};
k k1=new k();
Thread t=new Thread(k1);
t.start();

sdk版本:

plugins {
    id 'com.android.application'
}

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.0"

    defaultConfig {
        applicationId "com.example.my2"
        minSdkVersion 16
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值