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/505545712.客户端调用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 } });
相关文章推荐
- Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存?
- android图片压缩
- android开发中遇到的问题汇总
- B4A 或其它Android开发平台连接USB设备进行调试
- 如何实现android中监听来电并生成悬浮窗体提示
- Android中notifyDataSetInvalidated()和notifyDataSetChanged()
- 外层竖向ScrollView,里层横向ScrollView滑动冲突
- Android Gradle打包签名的方式
- 优化Android Studio/Gradle构建
- Android4.0以上机器的虚拟按键中显示menu键
- Android菜鸟进阶之路4.2-音频文件每隔一段时间存储一次
- Android中的错误解决。Plugin is too old
- Android 多渠道打包之混淆文件ProGuard技术详解-特别篇(打包系列教程之三)
- android之播放视频
- [原] Jenkins Android 自动打包配置
- Android XML解析
- Android textView复制,popupwindow显示在文字上方
- android keystore 找回密码
- android之播放多媒体文件一(播放音频)
- Android万能适配器基类