从异步任务类获取结果导致无响应

时间:2014-12-09 09:35:07

标签: android class android-asynctask

我写了一个扩展异步任务的类;我发送数据给它,类返回一个json对象

但是在异步任务上的预执行功能不起作用且我的程序在完成其工作之前进入无响应模式

public class async_Task extends AsyncTask<Void, Void, JSONObject>
{
    Context mycontext;
    List<NameValuePair> query_List=new ArrayList<NameValuePair>();
    String  str_URL;

    ProgressDialog  progressDialog;
    JSONObject      jsonObject      =null;
    JSONParser      jsonParser      =new JSONParser();

    public async_Task(Context context,List<NameValuePair> lst_NameValuePairs,String url_String)
    {
        this.mycontext  =context;
        this.query_List =lst_NameValuePairs;
        this.str_URL    =url_String;

        progressDialog  =new ProgressDialog(mycontext, ProgressDialog.THEME_HOLO_LIGHT);

    }
    @Override
    protected void onPreExecute()
    {
        progressDialog.setMessage("wait please...");
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialog.setCancelable(false);
        progressDialog.show();
    }

    @Override
    protected JSONObject doInBackground(Void... arg0)
    {
        try
        {
            jsonObject=jsonParser.store_And_Feedback(str_URL, query_List);
        }
        catch (Exception e)
        {
            try
            {
                jsonObject.put("res_code", "-5");
                jsonObject.put("res", e.getMessage());

            }
            catch (JSONException e1)
            {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

        }
        return jsonObject;
    }

    @Override
    protected void onPostExecute(JSONObject args)
    {
        progressDialog.dismiss();
    }

}

我在我的活动中调用了异步任务

jsonObject=new async_Task(JAct_Singup.this, lst_NameValuePairs, str_Url).execute().get();

我需要获取结果(jsonobject)形式的异步任务,并在删除get()时;我给出了这个错误

Type mismatch: cannot convert from AsyncTask<Void,Void,JSONObject> to JSONObject

2 个答案:

答案 0 :(得分:0)

store_And_Feedback(str_URL,query_List)方法出错了。

逐行调试store_And_Feedback(str_URL,query_List)方法。

或发布在此处,以便我可以查看此内容

答案 1 :(得分:0)

最后我找到了解决方案

1-创建新的interface

public interface AsyncResponse
{
    void progressEnd(JSONObject jsonObject);
}

2-声明异步任务类中的类

public class async_Task extends AsyncTask<Void, Void, JSONObject>
{
    public AsyncResponse response   =null;

    @Override
    protected void onPreExecute()
    {
         ....
    }

    @Override
    protected JSONObject doInBackground(Void... arg0)
    {
        ...
        return jsonObject;
    }

    @Override
    protected void onPostExecute(JSONObject args)
    {
        ...
        response.progressEnd(jsonObject);
    }

}

3-从创建的interface类(AsyncResponse)

实现类或活动
public class JAct_Singup extends Activity implements AsyncResponse
{
    .........
    @Override
    public void progressEnd(JSONObject jsonObject)
    {
        ...
    } 
}

每次调用异步任务类时,在完成异步任务后调用progressEnd