okgo概念性的東西我就不贅述了,百度一大堆,直接上具體的使用過程。
首先引入依賴:
implementation 'com.lzy.net:okgo:+'
我不知道這個版本號,所以直接用+來獲取最新版本了。
引入依賴後需要在Application中初始化:
OkGo.getInstance().init(this);
摒棄所有花裏胡哨的操作,要在application的oncreate()方法中初始化okgo就可以了。
因爲上一篇已經開啓了本地服務器了,所以這裏就直接使用本地服務器的地址了。使用NanoHttpd在Android項目中搭建服務器,需要在項目中搭建服務器的可以去了解一下哈,雖然寫得有點水。
上傳功能:
String serverIP = getIpAddress();//獲取本機ip地址
String strDBPath = MyApplication.GetApp().getExternalFilesDir(null) + "/TIS-Smarthome/" + choose + "/" + (choose + ".db3");//數據庫地址
final String strDBPath2 = MyApplication.GetApp().getExternalFilesDir(null) + "/TIS-Smarthome/" + "upload/";//文件上傳的路徑
String urlNano = "http://" + serverIP + ":8080"; //8080nanohttpd的端口號
File file = new File(strDBPath);//實例化數據庫文件
List<File> fileList = new ArrayList<File>();//添加到arraylist裏面
fileList.add(file);//把文件添加到Filelist中
// }
// File fileTest = new File("/sdcard/xda.txt");
//post上傳文件
OkGo.<File>post(/*url*/urlNano)
// .tag(DatabaseSelectUpload.class)
// .headers("header1", "headerValue1")
// .params("db3",file)
// .isMultipart(true)
// .params("securityCode",pblvariables.security_code)/*驗證碼*/
// .params("Remark",choose)/*數據庫名稱*/
// .upFile(file/*fileTest*/) /*使用up開頭的方法 所有的params設置的參數將丟失 所以兩種方法不能混用 */
.addFileParams("fileOfdatabase",fileList)
.execute(new FileCallback(strDBPath2,choose+".db3") {//指定上傳的路徑 上傳的文件名
@Override
public void onSuccess(Response<File> response) {
//UI線程 ,請求成功後回調
handleResponse(response);// 該方法能夠顯示成功時的請求狀態,請求頭,響應數據以及響應頭信息
File result = response.body(); // 獲取數據
Log.i("randomcode","上傳成功1 " + result);
Toast.makeText(DatabaseSelectUpload.this,"Success!",Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Response<File> response) {
super.onError(response);
//UI線程 ,請求失敗後回調
Log.i("randomcode","上傳失敗1 " + response.body());
Toast.makeText(DatabaseSelectUpload.this,"Fail!",Toast.LENGTH_SHORT).show();
}
@Override
public void onFinish() {
super.onFinish();
//UI線程 ,請求結束後回調,無論網絡請求還是失敗都會調用
finish();//結束當前頁面
}
});
我上面傳入的serverip地址是設備的ip,也就是說訪問的是局域網內的服務器。獲取方法百度一堆,懶的找的直接複製下面這個方法:
/**
* @Title: getIpAddress
*
* @Description: 獲取設備ip地址
*
* @return String
*/
public static String getIpAddress() {
try {
for (Enumeration<NetworkInterface> enNetI = NetworkInterface.getNetworkInterfaces(); enNetI
.hasMoreElements();) {
NetworkInterface netI = enNetI.nextElement();
for (Enumeration<InetAddress> enumIpAddr = netI.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (inetAddress instanceof Inet4Address &&!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress();
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
return "";
}
下載功能:
private void downLoadDatabase() {
final String choose = DatabaseSelectUpload.name_.get(0);//這裏給個寫死的名稱 真實的自己獲取或者設置
String serverIP = getIpAddress();
String url = "http://" + serverIP + ":8080";
String strDBPath3 = MyApplication.GetApp().getExternalFilesDir(null) + "/TIS- Smarthome/"+"download";//下載路徑
OkGo.<File>get(url)
/*.tag(this)
.headers("header1", "headerValue1")
.params("db3", String.valueOf(new File(strDBPath)))
.params("securityCode",pblvariables.security_code)*//*驗證碼*//*
.params("Remark",choose)*//*數據庫名稱*/
.execute(new FileCallback(strDBPath3,choose/*+"_1"*/+".db3") { //指定下載的路徑 下載文件名
@Override
public void onSuccess(Response<File> response) {
Toast.makeText(TransferActivity.this,"dowmload database success",Toast.LENGTH_SHORT).show();
Log.i("randomcode","下載成功1 " + response.body());
}
@Override
public void onError(Response<File> response) {
super.onError(response);
Toast.makeText(TransferActivity.this,"dowmload database fail",Toast.LENGTH_SHORT).show();
Log.i("randomcode","下載失敗1 " + response.body());
}
});
}
這樣就完事了,url就是你的服務器地址。可指定上傳下載的路徑和文件名稱。運行程序,成功的話會在對應目錄下找到上傳下載的文件。