上传思路:
由后台提供上传Rest API,Android客户端异步调用Rest API,将录音文件上传到远端服务器上
实现方法及基础知识准备:
1.后台提供Rest API ,使用DropWizard.DropWizard的使用可参考我之前写的博客:http://blog.csdn.net/adalu1986/article/details/50554571
2.客户端调用API,采用jodd.文档地址:http://jodd.org/doc/http.html
3.异步调用采用AsyncTask.文档链接:http://developer.android.com/reference/android/os/AsyncTask.html
代码设计
代码实现
AsyncNetAPI
package com.csform.android.uiapptemplate.api;
import java.io.File;
import android.os.AsyncTask;
import com.csform.android.uiapptemplate.bean.response.BaseResponseModel;
public class AsyncNetAPI {
public static final String TAG = "AsyncTaoCheNetAPI";
private NetAPI netAPI = NetAPI.getInstance();
private AsyncNetAPI() {
}
private static class AsyncNetAPIHolder {
public final static AsyncNetAPI instance = new AsyncNetAPI();
}
public static AsyncNetAPI getAsyncNetApiInstance() {
return AsyncNetAPIHolder.instance;
}
public static class AsynModel<T> {
public T result;
public Exception errorException;
}
/**
* 上传音频文件
*
* @param hashId
* @param audioFile
*/
public void asycUploadAudioFile(final String hashId,final File audioFile,final NetApiCallBack<AsynModel<BaseResponseModel>> callBack){
new AsyncTask<Void,Void,AsynModel<BaseResponseModel>>(){
@Override
protected AsynModel<BaseResponseModel> doInBackground(
Void... params) {
AsynModel<BaseResponseModel> asynModel = new AsynModel<>();
try {
asynModel.result = netAPI.uploadAudioFile(hashId, audioFile);
} catch (Exception e) {
asynModel.errorException = e;
}
return asynModel;
}
@Override
protected void onPostExecute(AsynModel<BaseResponseModel> result) {
if (null == result.errorException) {
callBack.onSuccess(result);
} else {
callBack.onFail(result);
}
super.onPostExecute(result);
}
}.execute();
}
}
NetAPI
package com.csform.android.uiapptemplate.api;
import java.io.File;
import jodd.http.HttpRequest;
import jodd.http.HttpResponse;
import jodd.util.StringUtil;
import android.app.Application;
import com.csform.android.uiapptemplate.bean.response.BaseResponseModel;
import com.google.gson.Gson;
public class NetAPI {
public static void init(Application application) {
NetContext.getNetContextInstance().setApplication(application);
}
public static void init(Application application, int pSize,
String deviceId, int oldChangeCarTokenType, int sellCarTokenType) {
NetContext.getNetContextInstance().setDeviceId(deviceId);
NetContext.getNetContextInstance().setPSize(pSize);
NetContext.getNetContextInstance().setApplication(application);
NetContext.getNetContextInstance().setOldHuanGouTokenType(
oldChangeCarTokenType);
NetContext.getNetContextInstance().setmSellCarTokenType(
sellCarTokenType);
}
private final static NetAPI instance = new NetAPI();
private NetAPI() {
}
public static NetAPI getInstance() {
return instance;
}
/**
* 上传音频数据
*
* @param hashId
* @param audioFile
* @return
*/
public BaseResponseModel uploadAudioFile(String hashId, File audioFile){
HttpRequest requestUpload = HttpRequest.post(NetConstant.AUDIO + "/upload/" + hashId)
.multipart(true)
.charset("UTF-8")
.form("file", audioFile);
HttpResponse response = requestUpload.send();
Gson gson = new Gson();
BaseResponseModel result = gson.fromJson(StringUtil.convertCharset(response.body(), "ISO-8859-1", "UTF-8"), BaseResponseModel.class);
return result;
}
}
Acitivity调用
AsyncNetAPI.getAsyncNetApiInstance().asycUploadAudioFile(hashId, audioFile, new NetApiCallBack<AsyncNetAPI.AsynModel<BaseResponseModel>>() {
@Override
public void onSuccess(AsynModel<BaseResponseModel> t) {
if(t != null && t.result != null){
if("200".equals(t.result.getStatus())){
//上传成功后,删除本地数据
System.out.println("上传成功");
}
}
}
@Override
public void onFail(AsynModel<BaseResponseModel> t) {
// TODO Auto-generated method stub
}
});