2014-02-14 66 views
0

我有一个关于异步任务的一个问题的AsyncTask(异步处理)

Async from android

使用2个活动 “A”,并输入一个字 “B”

从URL和和存储搜索值在DTO中,然后从getter和setter中获取值。

我的并发症是我在我的活动“B”中实现了异步,并且该活动正从相同的DTO中获取值。

问题是,我的帖子如何知道在后台做的事情已经从DTO取得了价值,DTO从互联网取得了价值...在互联网连接速度慢的情况下。

我米从“A”发送意图“B”和显示在“B”

问题的结果:

1.如果我异步除去然后应用会显示黑色的页,并且还冻结(仅在连接速度慢的情况下),但数据显示

2.如果我使用aync然后有时候进展很长一段时间,知道这些数据的inspite对话框显示已经显示在UI

代码链接https://www.dropbox.com/s/p27rpokz68sryv3/SearchData.java

https://www.dropbox.com/s/rm3i52djiay327u/SearchData_DTO.java

https://www.dropbox.com/s/2hpufx2a12480on/Search.java

PLS建议我要这个

关于可能的解决方案

+2

没有看到你的代码,我们什么都不能说。请发布您的代码。 – InnocentKiller

+1

你可以发布你的代码吗? –

回答

1

你需要监听asyntask完整的听众,对于让您的活动一个impliment界面并调用该方法f ROM活动B,S Asyntask,S onpostexecute方法 这样的活动为您会知道B已经完成了他的任务,你可以做接下来的事情.. 希望这有助于

public interface AsyncTaskCompletedListener { 
     public void OnResultSucceeded(String result); 
    } 

    public class LoginAsyncTask extends AsyncTask<String, Void, String> { 
     AsyncTaskCompletedListener mAsyncTaskCompletedListener; 

     @Override 
     protected String doInBackground(String... arg0) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      // TODO Auto-generated method stub 
      super.onPostExecute(result); 

      mAsyncTaskCompletedListener.OnResultSucceeded(result); 
     } 
    } 

这里的界面,让活动一个impliment this和from Activity从这个onpostexecute调用这个

From Activity A 

LoginAsyncTask customloginasync = new LoginAsyncTask(getActivity(), 
       FATCH_USER_LIST, arglist); 

     customloginasync.execute(); 

     customloginasync.setOnResultsListener(new AsyncTaskCompletedListener() { 

      @Override 
      public void OnResultSucceeded(String result, int asyncTaskNo) { 

       Logger.logInfo("CustomLogin data=========" + result); 

       ParseAvailableUserData(result); 

      } 
     }); 
+0

感谢您的建议:)干杯:P – Gattsu