Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:如何从异步任务中检索值?_Android_Variables_Android Asynctask - Fatal编程技术网

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();
}