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
						
					}
				});


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章