Android--menu和OkHttp框架(未封装),结合Executors(线程池)实现网络请求的案例
2017-07-25 21:16
881 查看
涉及到的 知识点:
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); } 4000 }); } } 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); } }); } }); } }
相关文章推荐
- Android网络请求框架----Okhttp3完全解析(2),封装框架
- Android使用OKHTTP网络框架请求数据,RecyclerView结合Glide展示图片,瀑布流布局样式
- Android 的OkHttp 网络请求框架的学习封装
- 优雅设计封装基于Okhttp3的网络框架(三):多线程下载功能核心实现 及 线程池、队列机制、终止线程解析
- Retrofit 2.0使用详解,配合OkHttp、Gson,Android最强网络请求框架
- Okhttp网络请求框架简析——Android网络请求框架(一)
- Android ——网络请求框架OkHttp使用
- okHttp封装,使用超简单的网络请求实现
- 使用okhttp androidannotaion springandroid 等框架搭建请求网络的框架
- android网络框架OkHttp之get请求(源码初识)
- 利用线程池实现Android客户端的http网络数据请求工具类
- Okhttp使用简析——Android网络请求框架(一)
- Android项目开发全程(三)-- 项目的前期搭建、网络请求封装是怎样实现的
- 在android中使用OkHttp框架处理网络请求
- 安卓网络请求框架okHttp的使用与封装
- android中Okhttp框架进行网络请求的工具类()
- 12_Android中HttpClient的应用,doGet,doPost,doHttpClientGet,doHttpClient请求,另外借助第三方框架实现网络连接的应用,
- Android 2016最热网络请求开发框架之Okhttp ,facebook强烈推荐必备开发
- android http——网络请求二次封装的框架设计
- 对OkHttp进行封装,实现了只查询缓存,网络请求失败自动查询本地缓存等功能