您的位置:首页 > 移动开发 > Android开发

Android菜鸟进阶之路4.3 -音频文件上传

2016-01-26 17:06 288 查看

上传思路:

由后台提供上传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

}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: