将AsyncTask结果传递给不同的Activites

时间:2015-09-12 10:21:52

标签: android android-asynctask

这是我到目前为止所做的:

  • 我有3项活动
  • 在每个活动中都是与要发送的数据库的连接和 收到数据
  • 每个输入(String)和Output(JSONObject)的工作方式相同
  • 首先,我在每个活动中实施了一个asynctask来发送和接收数据
  • 结果是启动任务的活动中的handeld
  • 为了减少代码,我将asynctask转移到了额外的类
  • 每个活动都实现一个界面" AsyncResponse"

我的问题是: 通过实现,我使用委托来设置对调用活动的引用。我找不到改变代表团的方法。如果我想在我的第二个活动中创建一个新的asynctask并尝试委托它,它会显示一个不兼容的类型错误。

那么我有没有办法将asyncresults发送回特定的通话活动?

实施示例

    public class MainActivity extends AppCompatActivity implements  AsyncResponse

    public void startAsync(String[] stringArray)
    {
        AsyncTaskRequest objMyTask = new AsyncTaskRequest(this);
       // objMyTask.delegate = this; // *.delegate in another Task in not possible
        objMyTask.execute(stringArray);
    }

AsyncResponse接口

    public interface AsyncResponse
    {
        void taskDone(JSONObject x);
    }

AsyncTask的示例

    public class AsyncTaskRequest extends android.os.AsyncTask<String, 
    Void, JSONObject>
    {
    //MainActivity delegate = null;

    private AsyncResponse delegate;

    public AsyncTaskRequest(AsyncResponse delegation)
    {
        delegate=delegation;
    }


    protected JSONObject doInBackground(String... postData)
    {.......}

    @Override
    protected void onPostExecute(JSONObject x)
    {
       delegate.taskDone(x);
    }

    }

1 个答案:

答案 0 :(得分:0)

您可以在ASyncTask中使用侦听器

在您的ASyncTask中:

public class AsyncTaskRequest extends android.os.AsyncTask<String, 
    Void, JSONObject>
    {

    private OnTaskCompleted listener;
    public interface OnTaskCompleted{
         void onTaskCompleted(Boolean output);
    }

    private AsyncResponse delegate;

    public AsyncTaskRequest(AsyncResponse delegation)
    {
        delegate=delegation;
    }


    protected JSONObject doInBackground(String... postData)
    {.......}

    @Override
    protected void onPostExecute(JSONObject x)
    {
       delegate.taskDone(x);
       if (listener != null)
         listener.onTaskCompleted(result);
    }

    }

并在你的java文件中调用这个函数:

public OnTaskCompleted listener =new OnTaskCompleted() {
        public void onTaskCompleted(Boolean output) {
            //your code here
       }
};