1. 程式人生 > >Android--menu和OkHttp框架(未封裝),結合Executors(執行緒池)實現網路請求的案例

Android--menu和OkHttp框架(未封裝),結合Executors(執行緒池)實現網路請求的案例

涉及到的 知識點:

1.安卓UI元件menu

2.OkHttp框架

3.Executors(執行緒池)

OkHttp結構簡介

這裡寫圖片描述

案例程式碼

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

import java.io.IOException;
import
java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Headers; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; public class MainActivity
extends AppCompatActivity {
private static final String TAG = "MainActivity-xx"; //服務端指定型別 private static final MediaType MEDIA_TYPE_MARKDOWN = MediaType.parse("text/x-markdown; charset=utf-8"); private static final String POST_URL = "https://api.github.com/markdown/raw"; public static
final String GET_URL = "http://www.imooc.com/api/teacher?type=2"; public final OkHttpClient mClient = new OkHttpClient(); private TextView mContentTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContentTextView = (TextView) findViewById(R.id.tvContent); } @Override public boolean onCreateOptionsMenu(Menu menu) { //獲取menu泵,載入menu資源 getMenuInflater().inflate(R.menu.actions, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menuGet: getToSync(); break; case R.id.menuResponse: getToAsync(); break; case R.id.menuPost: post(); break; } return super.onOptionsItemSelected(item); } private void post() { Request.Builder builder = new Request.Builder(); builder.url(POST_URL); //***************************服務端設定的資料型別****************提交的資料*************************** builder.post(RequestBody.create(MEDIA_TYPE_MARKDOWN, "Hello world github/linguist#1 **cool**, and #1!")); Request request = builder.build(); Call call = mClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { final String content = response.body().string(); runOnUiThread(new Runnable() { @Override public void run() { mContentTextView.setText(content); } }); } } }); } private void getToSync() { ExecutorService executor = Executors.newSingleThreadExecutor(); executor.submit(new Runnable() { @Override public void run() { Request.Builder builder = new Request.Builder(); builder.url(GET_URL); Request request = builder.build(); Log.d(TAG, "run: " + request); Call call = mClient.newCall(request); try { //同步請求 Response response = call.execute(); if (response.isSuccessful()) { final String string = response.body().string(); runOnUiThread(new Runnable() { @Override public void run() { mContentTextView.setText(string); } }); } } catch (IOException e) { e.printStackTrace(); } } }); executor.shutdown(); } private void getToAsync() { Request.Builder bulider = new Request.Builder(); bulider.url(GET_URL); Request request = bulider.build(); Call call = mClient.newCall(request); //非同步請求 call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { int code = response.code(); Headers headers = response.headers(); String content = response.body().string(); final StringBuilder sb = new StringBuilder(); sb.append("code: " + code).append("\nheaders: " + headers).append("\ncontent: " + content); runOnUiThread(new Runnable() { @Override public void run() { mContentTextView.setText(sb.toString()); Log.d(TAG, "run() called with: " + "" + sb); } }); } }); } }