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

上传思路:

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要成为一个Python的大牛,需要通过一系列实战经验来不断进阶。 首先,我们需要从菜鸟开始,学习基本的语法和常用库。掌握Python的基本语法、变量、数据类型、条件语句和循环语句等是必不可少的。此外,还要熟悉常用的Python库,如NumPy、Pandas和Matplotlib等,这些库在数据处理和可视化方面都非常常用。 接下来,我们需要通过实战来巩固所学的知识。可以选择一些小项目来实践,比如编写一个简单的Web应用、爬取网页数据或者创建一个简单的机器学习模型。通过实际应用,可以提升对Python的实际运用能力。 在实战过程中,我们需要积累并解决一些常见的问题。这些问题可能涉及到代码的优化、调试、性能优化等方面。通过解决这些问题,我们可以提升自己的编程能力,并且学会更高效地利用Python来解决实际问题。 另外,为了进一步提升自己的水平,可以参与开源项目或者自己创建项目。通过参与开源项目,可以学习到更多高级的编程技术和实践经验。同时,创建自己的项目有助于锻炼独立思考和解决问题的能力。 除了对Python语言的掌握外,我们还需要了解相关的领域知识。比如,在数据科学领域,需要学习统计学、机器学习和数据挖掘等知识。通过将Python与领域知识相结合,可以在相关领域中发挥更大的作用。 总而言之,成为一个Python的大牛需要不断地实践和学习。通过不断地积累实战经验,掌握并解决常见问题,参与开源项目或者自己创建项目,同时结合相关领域的知识,多角度地深入学习Python。这样的进阶之路需要耐心和毅力,但最终将能够取得令人骄傲的成果。 ### 回答2: Python是一门广泛应用于软件开发和数据分析的编程语言,具有简洁易学、功能强大的特点,因此非常适合初学者入门。然而,要想从菜鸟到大牛,需要不断拓展知识,提升技能。 首先,要全面掌握Python的基础知识,包括语法、数据类型、条件语句、循环语句等。可以通过阅读相关书籍、教程、参加培训班等方式进行学习。 其次,理解面向对象编程(OOP)是进阶的关键。Python是一门支持OOP的语言,掌握面向对象的概念和用法可以使代码更加模块化和可重用。可以通过练习编写类和对象,深入理解继承、封装和多态等概念。 另外,掌握Python标准库和第三方库也是提升的必要条件。标准库包含了许多常用的模块和函数,如操作文件、网络编程、并发等。同时,第三方库可以满足更具体的需求,如数据分析(NumPy、Pandas)、机器学习(Scikit-learn、TensorFlow)等。可以通过实践项目和参与开源社区来积累经验和熟悉常用的库。 此外,代码优化和性能调优也是进阶的一环。良好的代码结构、规范的命名和注释可以提高代码的可读性和可维护性。同时,了解性能优化的技巧和工具可以提高程序的执行效率。 最后,实际项目经验是从菜鸟到大牛的关键。通过实践解决真实的问题,遇到的挑战和解决方案都可以让你不断成长。可以自己找项目实践,也可以参与开源项目、参加比赛等方式来积攒经验。 总的来说,进阶的过程需要坚持不懈的学习和实践,并且保持持续学习的动力。不断总结和思考,参与开源社区和技术讨论也可以获得更多的启发和帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值