Android AsyncTask null value parameter



我的代码有一个小问题。我正在尝试在Doinbackground行为上执行凌空请求,然后使用其结果来设置一些布局元素。这是异步片段:

private class MyAsyncTask extends AsyncTask<String, Void, Message>
{
    @Override
    protected Message doInBackground(String... params) {
        rm = new RequestManager(MessageDisplay.this);
        idM = params[0];
        retrieveMessage(new VolleyCallbackOp(){
            public void onSuccess(List<Message> ml) {
                m = ml.get(0);
                Log.d("print1", m.getContent());   <---- this is fine
            }
        });
        Log.d("print2", m.getContent());   <---- m always null
        return m;
    }
    @Override
    protected void onPostExecute(Message m) {
        super.onPostExecute(m);
        Log.d("messaggio", m.getContent());
        mds = new MessageDisplaySetter(MessageDisplay.this);
        View v = mds.setMessageDisplayInfo(m, 3);
        contentD.addView(v);
                }
            }
        }); 
    }

此代码在Activity onCreate((中被调用:

Message m = new Message();
String target2 = i.getExtras().getString("messageId");
            new MyAsyncTask().execute(target2);

问题是log" print2"告诉变量 m 为null,而" print1"是可以的。您是否有任何提示将此请求的结果传递给相关的OnPostExecute((?

print2日志为null的原因 - 是因为您处于竞赛状态。通过调用new VolleyCallbackOp,您正在执行 ASYNCHROUNOUS 网络调用可能需要一段时间才能完成。您的代码不会等到完成。这就是为什么print2大多数时候是无效的。

您的情况有多种解决方案。其中之一是使用onSuccess的回调机制并在那里进行逻辑。

相关内容

  • 没有找到相关文章

最新更新