Okhttp

main布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.dash.a02_okhttp3.MainActivity">

    <Button
        android:onClick="getTongBu"
        android:text="get同步"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:onClick="getYiBu"
        android:text="get异步"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />


    <Button
        android:onClick="postYiBu"
        android:text="post异步"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:onClick="gilde"
        android:text="图片"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <ImageView
        android:id="@+id/image_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

MainActivity

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.google.gson.Gson;

import java.io.IOException;

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

public class MainActivity extends AppCompatActivity {

    private ImageView imageView;

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

        imageView = findViewById(R.id.image_view);


    }

    /**
     * get的同步请求
     * @param view
     */
    public void getTongBu(View view) {
        //匿名内部类.....继承 多态(父类的引用指向子类对象)
        new Thread(){
            @Override
            public void run() {
                //1.创建一个客户端对象
                OkHttpClient okHttpClient = new OkHttpClient();
                //2.通过构建器来创建一个request对象....制定了请求的路径
                Request request = new Request.Builder()
                        .url("https://www.zhaoapi.cn/ad/getAd")
                        //.method()//可以指定请求的方式,,,默认是get方式
                        .build();
                //3.客户端执行一个新的请求....此时还没有去执行
                Call call = okHttpClient.newCall(request);
                //4.指定请求的方式,,,,excute表示的是同步方式,,,返回值是一个响应的对象
                try {
                    Response response = call.execute();
                    if (response.isSuccessful()){//判断响应是否成功

                        String json = response.body().string();

                        Log.e("json", "run: "+json );

                    }


                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();




    }

    public void getYiBu(View view) {

        //1.创建一个客户端对象
        OkHttpClient okHttpClient = new OkHttpClient();
        //2.通过构建器来创建一个request对象....制定了请求的路径
        Request request = new Request.Builder()
                .url("https://www.zhaoapi.cn/ad/getAd")
                //.method()//可以指定请求的方式,,,默认是get方式
                .build();
        //3.客户端执行一个新的请求....此时还没有去执行
        Call call = okHttpClient.newCall(request);

        //4.异步执行
        call.enqueue(new Callback() {
            //请求失败
            @Override
            public void onFailure(Call call, IOException e) {

            }

            //请求得到了响应
            @Override
            public void onResponse(Call call, final Response response) throws IOException {
                if (response.isSuccessful()){
                    //拿到响应的内容....response.body().string()必须执行在子线程中
                    //响应体的 string() 方法对于小文档来说十分方便、高效。但是如果响应体太大(超过1MB)
                    // ,应避免适应 string()方法 ,因为他会将把整个文档加载到内存中。
                    //对于超过1MB的响应body,应使用流的方式来处理body......response.body().byteStream()

                    //response.body().string()...同一次请求只能执行一次这个方法,不可以多次调用,否则第二次返回就是null

                    String json = response.body().string();

                    //一般就需要进行解析  然后展示到页面上...更新页面是不能够在子线程的...可以使用handler
                    runOnUiThread(new Runnable() {//运行在主线程....这个方法是activity的方法
                        @Override
                        public void run() {
                            Toast.makeText(MainActivity.this,"请求成功:",Toast.LENGTH_SHORT).show();

                        }
                    });


                }
            }
        });

    }

    public void postYiBu(View view) {

        OkHttpClient okHttpClient = new OkHttpClient();

        //post方式的参数应该放在请求的实体内容中
        FormBody formBody = new FormBody.Builder()//创建的是表单的请求实体对象
                .add("mobile", "15715317583")
                .add("password", "123456")
                .build();

        //创建request对象
        Request request = new Request.Builder()
                .url("https://www.zhaoapi.cn/user/login")//post方式的路径
                .post(formBody)//post方式传递请求的参数对象
                .build();

        Call call = okHttpClient.newCall(request);

        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()){

                    String json = response.body().string();

                    //解析
                    final HomeBean homeBean = new Gson().fromJson(json, HomeBean.class);

                    //展示的时候需要运行在主线程
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(MainActivity.this,homeBean.getMsg(),Toast.LENGTH_SHORT).show();
                        }
                    });


                }
            }
        });

    }

    public void gilde(View view) {

        Glide.with(MainActivity.this).load("http://img5.imgtn.bdimg.com/it/u=49366202,632101467&fm=27&gp=0.jpg").into(imageView);

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值