Android——网络通信(OkHttp)

来源:互联网 发布:es6 数组的遍历 编辑:程序博客网 时间:2024/05/16 07:32

和之前的HttpUrlConnection相比较,OkHttp显得更加的方便,同样也

是分get和post请求。

get请求需要这几步:

导入okhttp、okio包(导入到项目中lib下面)

网盘下载

1.OkHttpClient(创建客户端)

2.Request.builder(造请求)

builder.get()

builder.url()

builder.build()

3.Call call=client.newCall(request)发送请求

call.enqueue(new Callback(){})

post请求只需将上述的builder.get替换成:

1.FormEncodingBuilder formbuilder=new FormEncodingBuilder();

2.formbuilder.addFormDataPart(“key”, “values”);

3.builder.post(formbuilder.build());

注意的是call.enqueue(new Callback(){

onResponse()、onFailure()

} 里面的这两个方法是在子线程中操作的,这个太棒了,也就是说不用再自己造一个子线

程,本身里面就是子线程自己操作的事情,不用使用AsyncTask,可以通过Handler发

送消息来更新UI操作。

这里写图片描述

我们来用okhttp来获取其中的内容。

这里写图片描述

package com.example.okhttptest;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import com.squareup.okhttp.Call;import com.squareup.okhttp.Callback;import com.squareup.okhttp.FormEncodingBuilder;import com.squareup.okhttp.MultipartBuilder;import com.squareup.okhttp.OkHttpClient;import com.squareup.okhttp.Request;import com.squareup.okhttp.Response;import com.squareup.okhttp.Request.Builder;import android.app.Activity;import android.app.ProgressDialog;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.os.Message;import android.view.View;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {    private TextView tv;    private ProgressDialog pd;    private Handler handler=new Handler(){        public void handleMessage(android.os.Message msg) {            pd.dismiss();            String context = (String) msg.obj;            tv.setText(context);        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        tv=(TextView) findViewById(R.id.tv);    }    public void myclick(View v )    {        pd=new ProgressDialog(this);        pd.show();        //1.创建客户端        OkHttpClient client=new OkHttpClient();        //2.造请求        Request.Builder builder=new Builder();        //post//      MultipartBuilder partbuilder=new MultipartBuilder();//      FormEncodingBuilder formbuilder=new FormEncodingBuilder();//      partbuilder.addFormDataPart("action", "GetAllNames");//      builder.post(partbuilder.build());        //get        builder.get();        builder.url("http://wwwtest.rupeng.cn:8888/QueryAvatarInfo.ashx?action=GetAllNames");        Request request = builder.build();        //3.发送请求        Call call=client.newCall(request);        call.enqueue(new Callback() {            //子线程中操作 的            @Override            public void onResponse(Response arg0) throws IOException {                // TODO Auto-generated method stub                    String string = arg0.body().string();                    Message msg=Message.obtain();                    msg.obj=string;                    handler.sendMessage(msg);            }            @Override            public void onFailure(Request arg0, IOException arg1) {                // TODO Auto-generated method stub            }        });    }}

可以通过onResponse方法中参数arg0来获取其中所需要的信息。

信息一般都放在arg0.body()中,文件大小什么的都在body里面。

arg0.body().string()获取里面的内容。

通过Handler发送消息给UI线程接收到更新UI。

0 0
原创粉丝点击