导包:
compile 'com.squareup.okhttp3:okhttp:3.9.0'
权限:(联网.读.写)
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
请求:get
public void btnForGet(View view) {
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.get()
.url("http://apicloud.mob.com/v1/cook/category/query?key=20a62b62d01c0")
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//当请求失败的时候,这个方法会被执行
System.out.println("请求失败 : " + e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//当请求成功,该方法会被执行
String result = response.body().string();
System.out.println("异步请求结果 : " + result);
}
});
//同步请求
// new Thread(){
// @Override
// public void run() {
// try {
// //创建Okhttpclient对象
// OkHttpClient okHttpClient = new OkHttpClient();
// Request request = new Request.Builder()
// .get()//get请求
// .url("http://apicloud.mob.com/v1/cook/category/query?key=20a62b62d01c0")
// .build();
// //配置请求相关参数
// Call call = okHttpClient.newCall(request);
// //服务器返回的响应对象
// Response response = call.execute();
//
// String result = response.body().string();
//
// System.out.println("结果 : "+result);
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// }.start();
}
请求:post
public void btnForPost(View view) {
OkHttpClient okHttpClient = new OkHttpClient();
//构建一个请求体
FormBody body = new FormBody.Builder()
.add("mobile", "13654897654")
.add("password", "123456")
.build();
//构建请求项
Request request = new Request.Builder()
.post(body)
.url("http://120.27.23.105/user/login")
.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 {
//请求成功的时候会被执行
//得到服务器返回的请求结果
String result = response.body().string();
System.out.println("post异步请求 : " + result);
handler.post(new Runnable() {
@Override
public void run() {
//切到主线程
}
});
}
});
}
上传1:
public void btnOnUpload(View view) {
upFile();
}
private void upFile() {
/* 第一个要上传的file */
File file1 = new File("/storage/emulated/0/Pictures/Screenshots/a.png");
RequestBody fileBody1 = RequestBody.create(MediaType.parse("application/octet-stream"), file1);
String file1Name = "testFile1.txt";
boolean exists = file1.exists();
Log.d("MainActivity", "exists:" + exists);
Log.d("MainActivity", "file1:" + file1);
/* form的分割线,自己定义 */
String boundary = "xx--------------------------------------------------------------xx";
MultipartBody mBody = new MultipartBody.Builder(boundary).setType(MultipartBody.FORM)
/* 上传一个普通的String参数 , key 叫 "p" */
.addFormDataPart("p", "你大爷666")
/* 底下是上传了两个文件 */
.addFormDataPart("file", file1Name, fileBody1)
.build();
/* 下边的就和post一样了 */
OkHttpClient okHttpClient = new OkHttpClient();
//http://120.27.23.105/file/upload
Request request = new Request.Builder().url("http://120.27.23.105/file/upload").post(mBody).build();
okHttpClient.newCall(request).enqueue(new Callback() {
public void onResponse(Call call, Response response) throws IOException {
final String bodyStr = response.body().string();
final boolean ok = response.isSuccessful();
runOnUiThread(new Runnable() {
public void run() {
if (ok) {
Toast.makeText(MainActivity.this, bodyStr, Toast.LENGTH_SHORT).show();
Log.d("MainActivity", "成功");
} else {
Log.d("MainActivity", "成功2");
Toast.makeText(MainActivity.this, "server error : " + bodyStr, Toast.LENGTH_SHORT).show();
}
}
});
}
public void onFailure(Call call, final IOException e) {
runOnUiThread(new Runnable() {
public void run() {
Log.d("MainActivity", "错误");
Toast.makeText(MainActivity.this, "错误" + e.toString(), Toast.LENGTH_SHORT).show();
}
});
}
});
}
上传2:
//作业上传
public void btnOnUpload(View view){
upLoadFile();
}
/**
* 上传文件
*/
private void upLoadFile(){
OkHttpClient okHttpClient = new OkHttpClient();
MultipartBody body = new MultipartBody.Builder()
.setType(MultipartBody.FORM)//设置类型 以表单的形式提交
.addFormDataPart("uid","3577")
//create medieaType : 上传文件类型 path : 上传的文件路劲
.addFormDataPart("file","img.png",RequestBody.create(MediaType.parse("img/png")
,new File(Environment.getExternalStorageDirectory(),"img.png")))
.build();
Request request = new Request.Builder()
.post(body)
.url("http://120.27.23.105/file/upload")
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//失败
System.out.println("失败");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
System.out.println("上传消息 : "+response.body().string());
}
});
}
下载:
//下载操作
public void btnDownload(View view) {
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url("http://msoftdl.360.cn/mobile/shouji360/360safesis/198227/360MobileSafe_7.7.3.1016.apk")//下载地址
.get()
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//失败f
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//成功
//思路:从服务器上来 -> 下载到本地(sdcard)
//得到服务响应过来的IO流
InputStream is = response.body().byteStream();
//读取流里面的内容,写到sdcard
byte[] buffer = new byte[1024];
int len = 0;
File file = new File(Environment.getExternalStorageDirectory(), "Mobliesafe_360.apk");
FileOutputStream fos = new FileOutputStream(file);
while ((len = is.read(buffer)) != -1) {
//数据已经写到了输出流
fos.write(buffer, 0, len);
fos.flush();
}
fos.close();
is.close();
System.out.println("下载成功");
}
});
}