【android】Android网络框架---OkHttp3

1、添加依赖 compile 'com.squareup.okhttp3:okhttp:3.4.2'
  project Structure-->dependencied/搜索okhttp.

       compile 'com.squareup.okhttp3:okhttp:3.4.2'

 

 2、添加权限
 <uses-permission android:name="android.permission.INTERNET"/>

   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

public class MainActivity extends AppCompatActivity {
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
     }
 
     //基本请求默认GET请求
     public void net1(View v){
         //可以通过构造方法来使用。使用Builder模式可以设置一些属性
 //        OkHttpClient client = new OkHttpClient();
         //缓存的请求的数据,json字符串,
         //Cache questCache = new Cache(new File("cache"),1024);
         OkHttpClient client = new OkHttpClient.Builder()
                 //读取超时5s
                 .readTimeout(5000, TimeUnit.MILLISECONDS)
                 //自带缓存,缓存可做可不做,做了就是让刷新的时候方便些,不会重复去请求同一个url多次
                 //.cache(questCache)
                 .build();
 
         //默认GET请求
         Request request = new Request.Builder()
                 .url("https://www.baidu.com")
                 .build();
 
         //call就是我们可以执行的请求类
         Call call = client.newCall(request);
 
 
 //        try {
 //            //同步方法,程序运行到这里会等待,所以这里我们不用这个方法
 //            Response execute = call.execute();
 //        } catch (IOException e) {
 //            e.printStackTrace();
 //        }
 
         //异步请求
         call.enqueue(new Callback() {
             @Override
             public void onFailure(Call call, IOException e) {
                 Log.e("TAG","请求失败");
             }
 
             @Override
             public void onResponse(Call call, Response response) throws IOException {
                 //子线程
                 Log.e("TAG",Thread.currentThread().getName()+"---结果:"+response.body().string());
                 //修改UI使用 runOnUiThread();或者使用Handler发送更新UI消息给主线程
             }
         });
 
         //取消
 //        call.cancel();
     }
 
     //POST请求
     public void net2(View v){
         OkHttpClient client = new OkHttpClient.Builder()
                 .readTimeout(5000,TimeUnit.MILLISECONDS)
                 .build();
 
         //创建Form表单对象,可以add多个键值对
         RequestBody body = new FormBody.Builder()
                 .add("showapi_appid","27306")
                 .add("showapi_sign","150e9206e7f542bab4affe49d73cb920")
                 .build();
 
         Request request = new Request.Builder().url("http://route.showapi.com/578-6")
                 .post(body)//添加参数
                 .build();
 
         Call call = client.newCall(request);
         call.enqueue(new Callback() {
             @Override
             public void onFailure(Call call, IOException e) {
                 Log.e("TAG","请求失败");
             }
 
             @Override
             public void onResponse(Call call, Response response) throws IOException {
                 Log.e("TAG","---->"+response.toString());
                 //子线程
             }
         });
 
     }
 
     //文件上传
     public void net3(View v){
         OkHttpClient client = new OkHttpClient.Builder()
                 .readTimeout(5000,TimeUnit.MILLISECONDS)
                 .build();
 
         //添加多个文件
         RequestBody fileBody = MultipartBody.create(MediaType.parse("application/octet-stream"),new File("上传的文件地址"));
 
 
         RequestBody body = new MultipartBody.Builder()
                 //设置为表单类型
                 .setType(MultipartBody.FORM)
                 //添加表单键值
                 .addFormDataPart("image头像字段名称","name文件名称",fileBody)
                 .build();
 
         Request request = new Request.Builder()
                 .url("http://192.168.18.250")
                 .post(body)
                 .build();
 
         Call call = client.newCall(request);
         call.enqueue(new Callback() {
             @Override
             public void onFailure(Call call, IOException e) {
 
             }
 
             @Override
             public void onResponse(Call call, Response response) throws IOException {
                 //子线程
             }
         });
     }
 }

参考资料:

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0106/2275.html

posted @ 2023-02-03 15:15  opensmarty  阅读(72)  评论(0编辑  收藏  举报