我有两个正在运行的AsyncTasks,正在等待结果的异步任务只是没有获得正确的结果。

我有一个像这样运行的网络类:

public ArrayList<User> searchForFriends(String activeHash, TelephoneNumber telephone)
{
    Object[] obj = {activeHash, telephone};
    try
    {
        return new SearchForFriendsTelephone().execute(obj).get(Constants.TIMEOUT_TIME, Constants.TIMEOUT_UNIT);
    }
    catch (InterruptedException e)
    {
        return null;
    }
    catch (ExecutionException e)
    {
        return null;
    }
    catch (TimeoutException e)
    {
        return null;
    }
}

private class SearchForFriendsTelephone extends AsyncTask<Object, Void, ArrayList<User>>
{
    @Override
    protected ArrayList<User> doInBackground(Object... searchTelephone)
    {
        if (config.getNetworkVersion() == config.NETWORK_PROTOCOL_VERSION_1)
        {
            TelephoneNumber tel = (TelephoneNumber) searchTelephone[1];
            List<NameValuePair> params = new ArrayList<NameValuePair>(3);
            params.add(new BasicNameValuePair(NetworkConfig.POST_ACTIVE_HASH, (String) searchTelephone[0]));
            params.add(new BasicNameValuePair(NetworkConfig.POST_MOBILE_NUMBER_COUNTRY_CODE, tel.getCountryCode()));
            params.add(new BasicNameValuePair(NetworkConfig.POST_MOBILE_NUMBER_RAW, tel.getNumberRaw()));
            ServerCommunication csc = new ServerCommunication();
            JSONObject jsonFoundFriends = csc.postToServer(config.getBaseUrl() + URL_FRIEND_SEARCH_MOBILE, params);
            if (jsonFoundFriends == null || csc.networkError())
            {
                FriendNetworkCommunication.this.networkError = csc.getNetworkError();
                return null;
            }
            return _processSearchFriends(jsonFoundFriends);
        }
        FriendNetworkCommunication.this.networkError = new NetworkError(NetworkLanguage.UNABLE_TO_PROCESS);
        return null;
    }


无论如何,这可以正常工作,没有问题,可以拉回用户。我在主ui线程中尝试以下代码时就知道了,它可以很好地填充视图。当我从另一个AsyncTask调用此代码时。我收到超时错误。

所有searchForFriends代码的代码:

private class CompareNumbers extends AsyncTask<ArrayList<NameAndNumber>, Integer, Void>
{
    @Override
    protected Void doInBackground(ArrayList<NameAndNumber>... params)
    {
        for (NameAndNumber nameNumber : params[0])
        {
            try
            {
                FriendNetworkCommunication fnc = new FriendNetworkCommunication();
                ArrayList<User> users = fnc.searchForFriends(CurrentUser.getInstance().getUserActiveHash(), new TelephoneNumber(String.valueOf(nameNumber.getNumber().getNationalNumber()), String.valueOf(nameNumber.getNumber().getCountryCode())));
                if (users != null && users.size() == 1)
                {
                    User u = users.get(0);
                    String[] s = nameNumber.getName().split(" ");
                    u.setFirstName(s[0]);
                    u.setLastName(s[1]);
                    ((ArrayAdapter<User>) ((ListView) getView().findViewById(R.id.friend_add_fragment_search_cont_list)).getAdapter()).add(u);
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
        ((ArrayAdapter<User>) ((ListView)getView().findViewById(R.id.friend_add_fragment_search_cont_list)).getAdapter()).notifyDataSetChanged();
        return null;
    }
 }


我可以不运行等待另一个的asynctask吗?

注意:如果这有什么不同,那么所有这些都片段运行。

注意2:第一个Asynctask运行一个网络调用,并且必须异步运行,所以我希望它像这样,所以如果我想可以在任何地方同步运行它

最佳答案

尝试在第一个异步任务的onpostexecute()中提供第二个异步任务的.execute()。

10-06 13:38