【Android】OkHttp安装与使用

1.AndroidStudio下安装:

File →Project Structre→App→Dependencies→"+"→LibararyDependency→ 搜索OkHTTP→“com.squareup.okhttp:okhttp:2.7.5”(或更高) OK



2.get请求 :获取一个网页内容:

1)        OkHttpClient:新建一个OkHttpClient实例,用于处理请求。

2)        Request:构建请求参数,如url,请求方式,请求参数,header等。

3)        Call:生成一个具体请求实例,相当于将请求封装成了任务;两种方式:

           ①、call.execute(),非异步方式,会阻塞线程,等待返回结果。

           ②、call.enqueue(Callback),异步方式。

4)      Response:结果响应。

说明:

    ① onResponse回调的参数是response,一般情况下,比如我们希望获得返回的字符串,可以通过response.body().string()获取;如果希望获得返回的二进制字节数组,则调用response.body().bytes();如果你想拿到返回的inputStream,则调用response.body().byteStream()。

    ②  Callback的onFailure()及onResponse()运行在非主线程,不能在该方法中直接进行UI操作。


示例:点击一个按钮,TextView中显示网页源码:

public class MainActivity extends AppCompatActivity {
    private OkHttpClient client = new OkHttpClient();
    private  TextView tv;
    private String data;

    private Handler handler=new Handler()
    {
        public void handleMessage(Message msg)
        {
            switch( msg.what) {
                case 0x001:
                    Toast.makeText(MainActivity.this, "内容是"+data, Toast.LENGTH_SHORT).show();
                    tv.setText(data);
                    break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn=(Button)findViewById(R.id.button);
      tv =(TextView)findViewById(R.id.textView);
        btn.setOnClickListener(new BtnOnClickListener());
    }
    class BtnOnClickListener implements View.OnClickListener
    {
        @Override
        public void onClick(View v)
        {String url="https://www.baidu.com";final Request request = new Request.Builder().url(url).build();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    Response response = null;
                    try {
                        response = client.newCall(request).execute();
                        if (response.isSuccessful()) {
                            data=response.body().string();
                            handler.sendEmptyMessage(0x001);
                        } else {
                            throw new IOException("Unexpected code " + response);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
           // Call call = client.newCall(request);
            //call.enqueue(new Callback() {
               // @Override
              //  public void onFailure(Call call, IOException e) {
              //  }
              //  @Override
              //  public void onResponse(Call call, final Response response) throws IOException {
                     //  data=response.body().string();
                       // handler.sendEmptyMessage(0x001);
               // }
          //  });


          }
        }
    }


Android中不允许UI线程进行网络请求 也不允许在非UI线程更新界面 所以我们开了一个新线程并用了handler。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值