OkHttp封裝之后使用
代碼都封裝好了,上層Activity如何調用呢?
1.依賴
如果是android studio開發支持在線依賴(我已經把項目添加到jcenter上):
compile 'com.ansen.http:okhttpencapsulation:1.0.1'
如果是eclipse那你先把ide切換到android studio吧。。。不閑麻煩的話也可以把源碼module的源碼copy出來,反正也就幾個類。
2.初始化HTTPCaller類
初始化的工作可以放Application,新建MyApplication類繼承Application。初始化的時候通過HttpConfig設置一些參數,也可以添加公共參數。
public class MyApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
HttpConfig httpConfig=new HttpConfig();
httpConfig.setAgent(true);//有代理的情況能不能訪問
httpConfig.setDebug(true);//是否debug模式 如果是debug模式打印log
httpConfig.setTagName("ansen");//打印log的tagname
//可以添加一些公共字段 每個接口都會帶上
httpConfig.addCommonField("pf","android");
httpConfig.addCommonField("version_code","1");
//初始化HTTPCaller類
HTTPCaller.getInstance().setHttpConfig(httpConfig);
}
}
因為自定義Application,需要給AndroidManifest.xml文件application標簽中的android:name屬性賦值,指定自己重寫的MyApplication。
發送get請求
發送get請求就一行代碼。
HTTPCaller.getInstance().get(User.class, "http://139.196.35.30:8080/OkHttpTest/getUserInfo.do?per=123", null, requestDataCallback);
請求回調
http請求回調接口,無論成功或者失敗都會回調。因為是測試所以都用在這個接口來回調,在真實的企業開發中,不同的請求用不同的回調。
private RequestDataCallback requestDataCallback = new RequestDataCallback<User>() {
@Override
public void dataCallback(User user) {
if(user==null){
Log.i("ansen", "請求失敗");
}else{
Log.i("ansen", "獲取用戶信息:" + user.toString());
}
}
};
發送post請求
post請求參數不是跟在url后面的,所以需要把請求參數放到集合里面。因為登錄接口也是返回的用戶信息,所以可以跟get請求用同一回調。
List<NameValuePair> postParam = new ArrayList<>();
postParam.add(new NameValuePair("username","ansen"));
postParam.add(new NameValuePair("password","123"));
HTTPCaller.getInstance().post(User.class, "http://139.196.35.30:8080/OkHttpTest/login.do", null, postParam, requestDataCallback);
上傳文件
1.上傳文件不帶回調進度
updaloadFile(null);
2.上傳文件回調上傳進度
updaloadFile(new ProgressUIListener(){
@Override
public void onUIProgressChanged(long numBytes, long totalBytes, float percent, float speed) {
Log.i("ansen","numBytes:"+numBytes+" totalBytes:"+totalBytes+" percent:"+percent+" speed:"+speed);
}
});
上傳文件跟其他表單參數不一樣的地方就是new NameValuePair對象的時候需要傳入三個參數,最后一個參數需要設置成true。
private void updaloadFile(ProgressUIListener progressUIListener){
List<NameValuePair> postParam = new ArrayList<>();
postParam.add(new NameValuePair("username", "ansen"));
postParam.add(new NameValuePair("password", "123"));
String filePath=copyFile();//復制一份文件到sdcard上,并且獲取文件路徑
postParam.add(new NameValuePair("upload_file",filePath,true));
if(progressUIListener==null){//上傳文件沒有回調進度條
HTTPCaller.getInstance().postFile(User.class, "http://139.196.35.30:8080/OkHttpTest/uploadFile.do", null, postParam, requestDataCallback);
}else{//上傳文件并且回調上傳進度
HTTPCaller.getInstance().postFile(User.class, "http://139.196.35.30:8080/OkHttpTest/uploadFile.do", null, postParam, requestDataCallback,progressUIListener);
}
}
上傳文件(傳入byte數組)
byte[] bytes=getUploadFileBytes();//獲取文件內容存入byte數組
HTTPCaller.getInstance().postFile(User.class, "http://139.196.35.30:8080/OkHttpTest/uploadFile.do", null, "upload_file","test.txt",bytes,requestDataCallback);
上傳文件(傳入byte數組)&&回調上傳進度
byte[] bytes=getUploadFileBytes();//獲取文件內容存入byte數組
HTTPCaller.getInstance().postFile(User.class, "http://139.196.35.30:8080/OkHttpTest/uploadFile.do", null, "upload_file", "test.txt", bytes, requestDataCallback, new ProgressUIListener() {
@Override
public void onUIProgressChanged(long numBytes, long totalBytes, float percent, float speed) {
Log.i("ansen","upload file content numBytes:"+numBytes+" totalBytes:"+totalBytes+" percent:"+percent+" speed:"+speed);
}
});
下載文件&&回調下載進度
String saveFilePath=Environment.getExternalStorageDirectory() + "/test/test222.txt";
HTTPCaller.getInstance().downloadFile("http://139.196.35.30:8080/OkHttpTest/upload/test.txt",saveFilePath,null,new ProgressUIListener(){
@Override
public void onUIProgressChanged(long numBytes, long totalBytes, float percent, float speed) {
Log.i("ansen","dowload file content numBytes:"+numBytes+" totalBytes:"+totalBytes+" percent:"+percent+" speed:"+speed);
}
});
修改公共參數
HTTPCaller.getInstance().updateCommonField("version_code","2");//更新公共字段版本號的值
源碼下載
OkHttp如何封裝點擊這里
如果你想第一時間看我的后期文章,掃碼關注公眾號,每周不定期推送Android開發實戰教程文章...
Android開發666 - 安卓開發技術分享
掃描二維碼加關注

浙公網安備 33010602011771號