代码,前提是先要导入一个OKIO.jar 包和一个OKHttp.jar 包
// 后期写有 OkHttp 的get请求和post请求详解
// OkHttp 网络框架的封装
// 创建一个OkHttp
OkHttpClient okHttpClient = new OkHttpClient();
// 创建一个Request
final Request request = new Request.Builder().url("http://www.oschina.net/action/api/tweet_list").build();
// 创建一个Call
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
// 返回请求到的数据,相当于一个主线程
@Override
public void onResponse(Response response) throws IOException {
// TODO Auto-generated method stub
// 拿到IO数据
InputStream byteStream = response.body().byteStream();
//拿到字符串
String string = response.body().string();
// 创建一个runOnUI
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// 更新UI
}
});
}
//
@Override
public void onFailure(Request request, IOException ioException) {
// TODO Auto-generated method stub
}
});
下载器:
需要导入包:XUtils.jar 包
代码:
// 创建HttpUtils
private HttpUtils httpUtils = new HttpUtils();
private HttpHandler<File> httpHandler;
//第一个参数下载APK的下载地址,第二个是存放地址,第三个参数是允许不允许续传,第四个创建一个下载的过程
httpHandler = httpUtils.download(apkUrl, "/sdcaard/" + System.currentTimeMillis() + "yidiantong.apk", true,
new RequestCallBack<File>() {
// 下载跟新的方法
@Override
public void onLoading(long total, long current, boolean isUploading) {
// TODO Auto-generated method stub
super.onLoading(total, current, isUploading);
my_Button.setText("正在下载...");
}
// 下载跟新的方法
@Override
public void onSuccess(ResponseInfo<File> arg0) {
// TODO Auto-generated method stub
my_Button.setText("下载完成");
// 得到下载到的APK的路径
//可以直接打开下载的APP进行安装
String path = arg0.result.getPath();
File file = new File(path);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
startActivity(intent);
}
// 下载失败的方法
@Override
public void onFailure(HttpException arg0, String arg1) {
// TODO Auto-generated method stub
my_Button.setText("下载失败");
}
});
由于写的不是很详细,再来简单的补充一下
OkHttp的get请求和post请求
get请求
//OkHttp的get请求方法
public void getRequest(View view) {
//创建Request,存放数据的
final Request request = new Request.Builder().url("http://www.baidu.com").build();
//用到的OkHttpClient
OkHttpClient okHttp = new OkHttpClient();
//执行者
Call call = okHttp.newCall(request);
//执行代码块
call.enqueue(new Callback() {
//请求失败的方法
@Override
public void onFailure(Call call, IOException e) {
mText.setText("请求失败");
}
//请求成功的方法
@Override
public void onResponse(Call call, Response response) throws IOException {
//此方法此时不在主线程中
final String string = response.body().string();
//更细UI需在主线程中, runOnUIThread方法
runOnUiThread(new Runnable() {
@Override
public void run() {
//更新UI
mText.setText(string);
}
});
}
});
}
post请求
//post请求
public void posttRequest(View view) {
//用到的OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
//创建FormBody.Buildy,保存传输的数据
FormBody.Builder formBody = new FormBody.Builder();
//调用add方法,方法采用 key,value 方法保存
//第一个参数,保存的是key, 第二个参数是value
formBody.add("username", "18600703694");
formBody.add("password", "123456789");
//创建Request,存放数据的
Request request = new Request.Builder().url("提交地址").post(formBody.build()).build();
//执行者
Call call = okHttpClient.newCall(request);
//执行代码块
call.enqueue(new Callback() {
//请求失败的方法
@Override
public void onFailure(Call call, IOException e) {
}
//请求成功的方法
@Override
public void onResponse(Call call, Response response) throws IOException {
//此方法此时不在主线程中
final String string = response.body().string();
//更细UI需在主线程中, runOnUIThread方法
runOnUiThread(new Runnable() {
@Override
public void run() {
//更新UI
mText.setText(string);
}
});
}
});
}
OkHttp网络框架