您的位置:首页 > 理论基础 > 计算机网络

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
相关文章推荐