Android:如何从异步任务中检索值?
我整天都在研究如何检索Android:如何从异步任务中检索值?,android,variables,android-asynctask,Android,Variables,Android Asynctask,我整天都在研究如何检索doInBackgroundasync任务中计算的值。一点运气都没有 我正在执行一个基本的HttpURLConnection请求,并使用DOM解析网页中的一些XML数据。我成功地将数据存储在两个不同的阵列中 ///////////inside doInBackground: for(int x=0; x<10; x++) { username[x] = element.getFirstChild().getNodeValue(); score[x] =
doInBackground
async任务中计算的值。一点运气都没有
我正在执行一个基本的HttpURLConnection请求,并使用DOM解析网页中的一些XML数据。我成功地将数据存储在两个不同的阵列中
///////////inside doInBackground:
for(int x=0; x<10; x++)
{
username[x] = element.getFirstChild().getNodeValue();
score[x] = anotherElement.getFirstChild().getNodeValue();
}
///inside-doin-background:
对于(int x=0;x如果您得到问题中所述的NullPointerException
,并且这是您的所有onPostExecute()
代码,则字段的maintextView
必须为空
您必须在启动AsyncTask之前对其进行初始化-最好在活动的onCreate()
或onCreateView()中进行初始化
用于片段。虽然这不是最佳实践,但您的代码应该可以工作。我认为问题来自另一部分。您能否指定引发NullPointerException的行?要从异步任务中检索值,您可以使用侦听器
首先创建接口列表器(新文件):
其次,对调用异步任务的主类使用implement
(示例)
第三,在主类中为侦听器方法创建完整的主体。您正在从接口重写方法。因此,如果更改参数,您也必须在接口中进行更改。在这里,您将在任务完成并调用onPostExecute后获得所有结果
@Override
public void onAsyncFinishMethod(String params) {
Log.d("xxx", params);
}
第四,为异步任务设置侦听器。这意味着:在异步任务类中创建此方法
public void setOnAsyncFinishedMethod(AsyncListener listener) {
this.listener = listener;
}
确保异步任务具有该侦听器类型的私有参数
private AsyncListener listener;
在onPostExecute中,异步任务类调用侦听器方法作为最后一个(如果您没有此方法,请创建它)
最后一步,在主类中调用异步任务时,不要忘记将setOnAsyncFinishedMethod方法绑定到它
我的例子是:
private void runMyAsyncTask() {
CustomAsync async = new CustomAsync();
async.setOnAsyncFinishedMethod(this);//<<< before execute use setOnAsyncFinishedMethod
thread.execute();
}
private void runMyAsyncTask(){
CustomAsync async=新建CustomAsync();
async.setOnAsyncFinishedMethod(this);/:)我想你浪费了你的一天。对吧?别担心,给你30分钟的时间阅读你可以拥有asyn task类的username和score数组属性,你可以在postexecutePlase中使用它们添加一个包含stacktrace的日志片段。可能重复的android开发者页面是我首先要去的地方。我在那里找不到我需要的东西。哦,去吧sh,我全局声明了一个按钮。我从来没有使用过这个按钮,但我有button button=(button)findviewbyd(R.id.button)
在全球课程中。是的,我知道。我只是尝试学习所有不同的做事方式。问题确实来自代码的另一部分。我已经研究并尝试了类似的方法,但是对于我需要完成的简单任务来说,发现它不必要地复杂。谢谢你的回答。
public void setOnAsyncFinishedMethod(AsyncListener listener) {
this.listener = listener;
}
private AsyncListener listener;
@Override
protected void onPostExecute(String params) {
listener.onAsyncFinishMethod(param);
}
private void runMyAsyncTask() {
CustomAsync async = new CustomAsync();
async.setOnAsyncFinishedMethod(this);//<<< before execute use setOnAsyncFinishedMethod
thread.execute();
}