Android--OkHttp

下面的get和post都必须在子线程中执行,是张鸿洋大佬封装的

get请求:

 private OkHttpClient client = new OkHttpClient();
	
 String get(String url) throws IOException {
        Request request = new Request.Builder()
                .url(url)
                .build();
        Response response = client.newCall(request).execute();
            return response.body().string();

    }

post请求:

private OkHttpClient client = new OkHttpClient();
public static final MediaType JSON
            = MediaType.parse("application/json; charset=utf-8");

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

post请求第二个参数是请求的上传的json数据。如果没有要上传这赋值:“”


还有一种不用jar包的方式:

OkHttpUtils的使用:
在github搜索OkHttp,哪个点赞多点击哪个好吧。之后拉到下面找到下面这个:
在这里插入图片描述

将 implementation(“com.squareup.okhttp3:okhttp:4.4.0”) 复制进 build.gradle文件(dependencies 里面)。然后进行右上角的同步。即可是使用了。

直接上全部代码先理解着,再写详细点:

这个是基本的思路:
//1,有个客户端,这个客户的属性是等待时间
 //2,这个客户的行为是发出请求,包括请求的地址,方式
 //3,客户开始发出请求
 //请求方式(异步,同步)

 public class MainActivity extends AppCompatActivity {


     private static final String PATH ="http://192.168.137.1:8080/cookie_war_exploded/ShopInfoServlet" ;
     private static final String TAG="okhttp";
     private static final String UPLOAD_PATH="http://192.168.137.1:8080/upload_war_exploded/upload";

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

    //get
    public void getRequest(View view){

        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(10000, TimeUnit.MILLISECONDS)
                .build();
        //创建连接请求内容
        Request request=new Request.Builder()
                .get()
                .url(PATH)
                .build();
        //用Client去创建请求任务
        Call task=okHttpClient.newCall(request);
        //异步任务
        task.enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {
                Log.e(TAG," onFailure:"+e.toString());
            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                int code = response.code();
                if(code== HttpURLConnection.HTTP_OK){
                    Log.e(TAG,"code:"+code);
                    ResponseBody body = response.body();
                    Log.e(TAG,"onResponse   :"+body.string());
                }
            }
        });
    }


    //post
     public void postCommit(View view){
         //先有CLient
         OkHttpClient client=new OkHttpClient.Builder()
                 .connectTimeout(10000,TimeUnit.MILLISECONDS)
                 .build();

         //要提交的内容
         String str="在吗";
         str=new Gson().toJson(str);
         MediaType mediaType=MediaType.parse("application/json");

         RequestBody body=RequestBody.create(str,mediaType);

         final Request request=new Request.Builder()
                 .post(body)
                 .url(PATH)
                 .build();

         Call task=client.newCall(request);
         task.enqueue(new Callback() {
             @Override
             public void onFailure(@NotNull Call call, @NotNull IOException e) {
                 Log.e(TAG,"onFailure"+e.toString());
             }

             @Override
             public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                 int code = response.code();
                 ResponseBody responseBody = response.body();
                 Log.e(TAG,"onResponse"+code+"----"+responseBody.string());
             }
         });
     }



     //上传文件到服务器。
     public void postFile(View view){

         OkHttpClient client=new OkHttpClient.Builder()
                 .connectTimeout(10000,TimeUnit.MILLISECONDS)
                 .build();

         //这个地址是,我在文件里面直接复制的。
         //然后就是只能复制这个工程下的文件路径,如果调用别的工程文件路径会报错
         File file=new File("/data/data/com.example.myapplication/files/123.txt");

         //这个是文件的Mime类型:https://www.sunofbeach.net/a/1202497837313675264。这个网址有各种类型,自己找
         MediaType fileType=MediaType.parse("text/plain");
         RequestBody fileBody=RequestBody.create(file,fileType);

         final RequestBody requestBody = new MultipartBody.Builder()
                 .addFormDataPart("file",file.getName(),fileBody)
                 .build();

         Request request=new Request.Builder()
                 .post(requestBody)
                 .url(UPLOAD_PATH)
                 .build();

         Call task=client.newCall(request);
         task.enqueue(new Callback() {
             @Override
             public void onFailure(@NotNull Call call, @NotNull IOException e) {
                 Log.e(TAG,"onFailure....");
             }

             @Override
             public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                 Log.e(TAG,"onResponse....");
                 if((response.code()==HttpURLConnection.HTTP_OK)){
                     ResponseBody body=response.body();
                     if(body!=null){
                         String result=body.string();
                         Log.e(TAG,"....");
                     }
                 }
             }
         });
     }


     //上传多文件
     public void postFiles(View view){

         //1,有个客户端,这个客户的属性是等待时间
         OkHttpClient client=new OkHttpClient.Builder()
                 .connectTimeout(10000,TimeUnit.MILLISECONDS)
                 .build();

            //文件的地址
         File file1=new File("/data/data/com.example.myapplication/files/456.txt");
         File file2=new File("/data/data/com.example.myapplication/files/123.txt");
            //文件的类型
         MediaType mediaType=MediaType.parse("text/plain");
            //将文件的地址和类型封装在一起,对应文件对应着对应的类型
         RequestBody body1=RequestBody.create(file1,mediaType);
         RequestBody body2=RequestBody.create(file2,mediaType);

            //将多个文件封装着一个(可以理解为压缩)
         RequestBody requestBody=new MultipartBody.Builder()
                 .addFormDataPart("file", file1.getName(),body1)
                 .addFormDataPart("file", file2.getName(),body2)
                 .build();

         //2,这个客户的行为是发出请求,包括请求的地址,方式
         Request request=new Request.Builder()
                 .url(UPLOAD_PATH)
                 .post(requestBody)
                 .build();

         //3,客户开始发出请求
         Call task=client.newCall(request);

            //这个请求是通过异步任务的方式
         task.enqueue(new Callback() {
             //如果打不通,则failure
             @Override
             public void onFailure(@NotNull Call call, @NotNull IOException e) {
                 Log.e(TAG,"onFailure....");
             }

             //成功则返回response
             @Override
             public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                 Log.e(TAG,"onResponse....");
                 if((response.code()==HttpURLConnection.HTTP_OK)){
                     ResponseBody body=response.body();
                     if(body!=null){
                         String result=body.string();
                         Log.e(TAG,"....");
                     }
                 }
             }
         });

     }
}

上传多文件(注释是思路)

     //上传多文件
     public void postFiles(View view){

         //1,有个客户端,这个客户的属性是等待时间
         OkHttpClient client=new OkHttpClient.Builder()
                 .connectTimeout(10000,TimeUnit.MILLISECONDS)
                 .build();

            //文件的地址
         File file1=new File("/data/data/com.example.myapplication/files/456.txt");
         File file2=new File("/data/data/com.example.myapplication/files/123.txt");
            //文件的类型
         MediaType mediaType=MediaType.parse("text/plain");
            //将文件的地址和类型封装在一起,对应文件对应着对应的类型
         RequestBody body1=RequestBody.create(file1,mediaType);
         RequestBody body2=RequestBody.create(file2,mediaType);

            //将多个文件封装着一个(可以理解为压缩)
         RequestBody requestBody=new MultipartBody.Builder()
                 .addFormDataPart("file", file1.getName(),body1)
                 .addFormDataPart("file", file2.getName(),body2)
                 .build();

         //2,这个客户的行为是发出请求,包括请求的地址,方式
         Request request=new Request.Builder()
                 .url(UPLOAD_PATH)
                 .post(requestBody)
                 .build();

         //3,客户开始发出请求
         Call task=client.newCall(request);

            //这个请求是通过异步任务的方式
         task.enqueue(new Callback() {
             //如果打不通,则failure
             @Override
             public void onFailure(@NotNull Call call, @NotNull IOException e) {
                 Log.e(TAG,"onFailure....");
             }

             //成功则返回response
             @Override
             public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                 Log.e(TAG,"onResponse....");
                 if((response.code()==HttpURLConnection.HTTP_OK)){
                     ResponseBody body=response.body();
                     if(body!=null){
                         String result=body.string();
                         Log.e(TAG,"....");
                     }
                 }
             }
         });

     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值