com.ztspeech.simutalk2.weibo.PostRecordTask.java Source code

Java tutorial

Introduction

Here is the source code for com.ztspeech.simutalk2.weibo.PostRecordTask.java

Source

/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.ztspeech.simutalk2.weibo;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.util.HashMap;
import java.util.Map;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

import com.ztspeech.simutalk2.R;
import com.ztspeech.weibo.sdk.kaixin.Kaixin;
import com.ztspeech.weibo.sdk.kaixin.KaixinError;
import com.ztspeech.weibo.sdk.kaixin.Util;

public class PostRecordTask extends AsyncTask<Object, Void, Integer> {
    private static final String TAG = "PostRecordTask";
    private static final String RESTAPI_INTERFACE_POSTRECORD = "/records/add.json";
    private Handler handler;
    public ProgressDialog loadingDialog;
    public boolean isCancel = false;
    private Context context;

    public PostRecordTask(Context context) {
        this.context = context;
    }

    @Override
    protected void onPreExecute() {
        showLoading();
    }

    protected Integer doInBackground(Object... params) {
        /*
         * if (params == null || params.length == 0 || params.length != 5) {
         * handler.sendEmptyMessage(Constant.RESULT_FAILED_ARG_ERR); return 0; }
         */

        Kaixin kaixin = (Kaixin) params[0];
        handler = (Handler) params[1];
        String content = (String) params[2];
        InputStream in = (InputStream) params[3];
        try {
            // 
            Bundle bundle = new Bundle();
            bundle.putString("content", content);

            Map<String, Object> photoes = new HashMap<String, Object>();
            photoes.put("filename", in);

            String jsonResult = kaixin.uploadContent(context, RESTAPI_INTERFACE_POSTRECORD, bundle, photoes);

            if (jsonResult == null) {
                handler.sendEmptyMessage(Constant.RESULT_FAILED_NETWORK_ERR);
            } else {
                KaixinError kaixinError = Util.parseRequestError(jsonResult);
                if (kaixinError != null) {
                    Message msg = Message.obtain();
                    msg.what = Constant.RESULT_FAILED_REQUEST_ERR;
                    msg.obj = kaixinError;
                    handler.sendMessage(msg);
                } else {
                    long rid = getRecordID(jsonResult);
                    if (!isCancel) {
                        if (rid > 0) {
                            handler.sendEmptyMessage(Constant.RESULT_POST_RECORD_OK);
                        } else {
                            handler.sendEmptyMessage(Constant.RESULT_POST_RECORD_FAILED);
                        }
                    } else {
                        handler.sendEmptyMessage(Constant.RESULT_USER_CANCEL_PROCESS);
                    }
                }
            }
        } catch (MalformedURLException e1) {
            Log.e(TAG, "", e1);
            handler.sendEmptyMessage(Constant.RESULT_FAILED_MALFORMEDURL_ERR);
        } catch (IOException e1) {
            Log.e(TAG, "", e1);
            handler.sendEmptyMessage(Constant.RESULT_FAILED_NETWORK_ERR);
        } catch (Exception e1) {
            Log.e(TAG, "", e1);
            handler.sendEmptyMessage(Constant.RESULT_FAILED);
        }
        return 1;
    }

    private long getRecordID(String jsonResult) throws JSONException {
        JSONObject jsonObj = new JSONObject(jsonResult);
        if (jsonObj == null) {
            return 0;
        }

        long rid = jsonObj.optInt("rid");
        return rid;
    }

    @Override
    protected void onCancelled() {
        // TODO Auto-generated method stub
    }

    @Override
    protected void onPostExecute(Integer result) {
        dismissLoading();
    }

    /**
     * 
     */
    public void dismissLoading() {
        if (loadingDialog != null) {
            loadingDialog.dismiss();
            loadingDialog = null;
        }
    }

    public void cancelRequest() {
        isCancel = true;
    }

    /**
     * 
     */
    public void onLoadingCacel() {
        cancelRequest();
        dismissLoading();
    }

    public void showLoading() {
        if (loadingDialog == null) {
            loadingDialog = new ProgressDialog(context, R.style.mydialog);
            loadingDialog.setMessage(context.getString(R.string.loading));
            loadingDialog.setIndeterminate(true);
            loadingDialog.setCancelable(true);
            loadingDialog.setOnCancelListener(new OnCancelListener() {
                @Override
                public void onCancel(DialogInterface dialog) {
                    onLoadingCacel();
                }
            });
        }
        isCancel = false;
        loadingDialog.show();
    }
}