安卓 OkHttp进阶使用(异步请求,传输Json、File对象)(28)

xiaoxiao2021-02-28  46

使用OkHttp实现更多功能(Get、Post异步请求、使用Post传输Json、File对象)

参考文章:https://blog.csdn.net/fightingXia/article/details/70947701

public class OkHttpGetAsyncActivity extends Activity { private final int OKHTTP_GET_SUCCESS = 0; private final int OKHTTP_GET_FAIL = 1; private Button send_http; private TextView get_http; String responseData; //接收OkHttp中发送的Message,根据不同的Message进行不同的UI操作 Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case OKHTTP_GET_SUCCESS: Toast.makeText(OkHttpGetAsyncActivity.this, "Success", Toast.LENGTH_SHORT).show(); get_http.setText(responseData); break; case OKHTTP_GET_FAIL: Toast.makeText(OkHttpGetAsyncActivity.this, "Failure", Toast.LENGTH_SHORT).show(); break; default: break; } } }; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_ok_http); send_http = findViewById(R.id.send_Okhttp); get_http = findViewById(R.id.get_Okhttp); send_http.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //这里实现Get请求 // getDataAsync(); //这里实现Post请求(传递键值对参数) // getDataPostAsync(); //这里实现Post请求(传递Json对象) // getDataPostJsonAsync(); //这里实现Post请求(传递File对象) getDataPostFileAsync(); } }); get_http.setMovementMethod(new ScrollingMovementMethod()); } private void getDataAsync() { //Get的异步请求不需要开启子线程,但是在其回调函数中还是在子线程中执行 //所以更改UI还是需要在主线程中 OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("http://www.baidu.com") .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Message message = new Message(); message.what = OKHTTP_GET_FAIL; handler.sendMessage(message); } @Override public void onResponse(Call call, Response response) throws IOException { if(response.isSuccessful()){ responseData = response.body().string(); Message message = new Message(); message.what = OKHTTP_GET_SUCCESS; handler.sendMessage(message); } } }); } private void getDataPostAsync() { //Post的异步请求不需要开启子线程,但是在其回调函数中还是在子线程中执行 //所以更改UI还是需要在主线程中 OkHttpClient client = new OkHttpClient(); RequestBody requestBody = new FormBody.Builder() .add("arg1","123") .add("arg2","123456") .build(); Request request = new Request.Builder() .url("http://www.baidu.com") .post(requestBody) .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Message message = new Message(); message.what = OKHTTP_GET_FAIL; Log.v("onFailure",message.what + ""); handler.sendMessage(message); } @Override public void onResponse(Call call, Response response) throws IOException { Log.v("onResponse","onResponse "); //response.isSuccessful()这个布尔值代表的是,你使用Post请求过后,返回时是否成功 //比如我们发送一个错误参数的Post请求,如果添加了response.isSuccessful(),那么他的条件语句不会触发,即response.isSuccessful() == false。 // if(response.isSuccessful()){ responseData = response.body().string(); Message message = new Message(); message.what = OKHTTP_GET_SUCCESS; handler.sendMessage(message); // } } }); } private void getDataPostJsonAsync() { OkHttpClient client = new OkHttpClient(); //设置数据类型为JSON类型 MediaType JSON = MediaType.parse("application/json; charset=utf-8"); //JSON格式数据 String jsonStr = "{\"arg1\":\"123456\",\"arg2\":\"525\"}"; RequestBody requestBody = RequestBody.create(JSON, jsonStr); Request request = new Request.Builder() .url("http://www.baidu.com") .post(requestBody) .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Message message = new Message(); message.what = OKHTTP_GET_FAIL; Log.v("onFailure",message.what + ""); handler.sendMessage(message); } @Override public void onResponse(Call call, Response response) throws IOException { Log.v("onResponse","onResponse "); //response.isSuccessful()这个布尔值代表的是,你使用Post请求过后,返回时是否成功 //比如我们发送一个错误参数的Post请求,如果添加了response.isSuccessful(),那么他的条件语句不会触发,即response.isSuccessful() == false。 // if(response.isSuccessful()){ responseData = response.body().string(); Message message = new Message(); message.what = OKHTTP_GET_SUCCESS; handler.sendMessage(message); // } } }); } private void getDataPostFileAsync() { OkHttpClient client = new OkHttpClient(); //设置一种File对象 MediaType fileType = MediaType.parse("File/*"); File file = new File("FilePath"); RequestBody requestBody = RequestBody.create(fileType, file); Request request = new Request.Builder() .url("http://www.baidu.com") .post(requestBody) .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Message message = new Message(); message.what = OKHTTP_GET_FAIL; Log.v("onFailure",message.what + ""); handler.sendMessage(message); } @Override public void onResponse(Call call, Response response) throws IOException { Log.v("onResponse","onResponse "); //response.isSuccessful()这个布尔值代表的是,你使用Post请求过后,返回时是否成功 //比如我们发送一个错误参数的Post请求,如果添加了response.isSuccessful(),那么他的条件语句不会触发,即response.isSuccessful() == false。 // if(response.isSuccessful()){ responseData = response.body().string(); Message message = new Message(); message.what = OKHTTP_GET_SUCCESS; handler.sendMessage(message); // } } }); } }
转载请注明原文地址: https://www.6miu.com/read-2630915.html

最新回复(0)