OkHttp框架的简单使用

布局部分

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.lt.okhttppost.MainActivity">

 <Button
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:onClick="StringClick"
     android:text="点我上传String类型"/>

 <Button
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:onClick="KeyValueClick"
     android:text="点我上传KeyValue类型"/>

 <Button
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:onClick="FileClick"
     android:text="点我上传File类型"/>
</LinearLayout>

mainactivity 部分

package com.lt.okhttppost;

import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

import java.io.File;
import java.io.IOException;

import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;

public class MainActivity extends AppCompatActivity {

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

    //构建json字符串
    private String buildJson(String player1, String player2) {
        return "{'winCondition':'HIGH_SCORE',"
                + "'name':'Bowling',"
                + "'round':4,"
                + "'lastSaved':1367702411696,"
                + "'dateStarted':1367702378785,"
                + "'players':["
                + "{'name':'" + player1 + "','history':[10,8,6,7,8],'color':-13388315,'total':39},"
                + "{'name':'" + player2 + "','history':[6,10,5,10,10],'color':-48060,'total':41}"
                + "]}";
    }

    //
    public void StringClick(View view) {
        try {
//1.
            OkHttpClient okHttpClient = new OkHttpClient();
            //5.type  &  json
            MediaType type = MediaType.parse("application/json;charset=utf-8");
            String json = buildJson("Colin", "CHEN");
            //4.生成一个requestBody对象
            RequestBody requestBody = RequestBody.create(type, json);
            //3.
            Request request = new Request.Builder().url("需要我们上传的地址【服务器的地址】").post(requestBody).build();
            //2.
            Response response = okHttpClient.newCall(request).execute();
            if (response.isSuccessful()){
                ResponseBody responseBody = response.body();
                String result = responseBody.string();
                Log.e("TAG","上传成功"+result);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    //
    public void KeyValueClick(View view) {
      new Thread(new Runnable() {
          @Override
          public void run() {
              OkHttpClient okHttpClient = new OkHttpClient();
              try {
                  RequestBody body = new FormBody.Builder().add("_name","CHEN").add("_id","123").build();
                  Request request = new Request.Builder().url("").post(body).build();
                  Response response = okHttpClient.newCall(request).execute();
                  if (response.isSuccessful()){
                      String string = response.body().string();
                      Log.e("Tag","上传成功"+string);
                  }
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
      }).start();
    }

    //
    public void FileClick(View view) {
        OkHttpClient okHttpClient = new OkHttpClient();
        try {
            MediaType type = MediaType.parse("text/*");
            String path = Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"文件夹名"+File.separator + "文件名";
            File file = new File(path);
            RequestBody body = RequestBody.create(type,file);
            Request request = new Request.Builder().url("").post(body).build();
            Response response = okHttpClient.newCall(request).execute();
            if (response.isSuccessful()){
                String string = response.body().string();
                Log.e("TAG", "成功了---" + string);
            }

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

Constants

package com.lt.okhttppost;

/**
 * Created by Administrator
 */
public class Constant {
    // 最新
    public final static String URL_LATEST0 = "http://lib.wap.zol.com.cn/ipj/docList.php?class_id=0&page=%d&vs=and380&retina=1";
    public final static String URL_LATEST = "http://m2.qiushibaike.com/article/list/latest?page=%d";

}
### 关于 Android 开发中 OkHttp 框架使用 #### 简介 OkHttp 是一个用于发起网络请求的开源项目,作为 Android 平台上的轻量级框架,它不仅支持文件上传与下载功能,还兼容 HTTPS 协议[^1]。 #### 使用方法概述 为了在应用程序中利用 OkHttp 执行 HTTP 请求,开发者需遵循几个基本步骤来设置环境并编写相应的代码逻辑。这包括但不限于引入必要的依赖库以及实现具体的同步或异步 POST/GET 请求操作[^3]。 #### 实现简单的 GET 请求 下面展示了一个通过 OkHttp 客户端发送 GET 请求的具体实例: ```java import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class Example { public static void main(String[] args) throws Exception { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.example.com") .build(); try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) throw new RuntimeException("Unexpected code " + response); System.out.println(response.body().string()); } } } ``` 此段代码展示了如何创建 `OkHttpClient` 对象,并构建一个新的 `Request` 来指定目标 URL 和请求方式(这里是 GET)。接着调用了 `.newCall()` 方法执行该请求,并处理返回的数据流[^4]。 #### 更多高级特性 除了基础的功能外,OkHttp 提供了许多其他有用的特性和配置选项,比如连接池管理、缓存机制等,这些都可以显著提高应用性能和用户体验。对于更复杂的场景,则可以考虑采用像 Retrofit 这样的更高层次抽象工具来进行 API 调用和服务接口定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值