onProgressUpdate()中的NullPointerException

时间:2013-12-14 14:46:17

标签: java android android-asynctask nullpointerexception android-progressbar

编辑:我将此pB = (ProgressBar) findViewById(R.id.progressBar);放在onPreExecute()中。一切正常,一切正常。但这是一个很好的解决方案吗?我知道在我的主线程中进度条是!null。但在此findViewById之前,我的asynctask只是找不到我想要的进度条,即使我以为我在.execute()中传递它。

这是我第一次使用asynctask。我有一个我想要计算的进度条,但我一直得到一个NullPointerException。

日志显示为“进度更新:1”,但随后VM关闭。所以我知道一个整数正在通过,但我无法弄清楚为什么它找不到进度条(pB)。我试图在主线程中的setProgress(0),在onPreExecute()中,但机器讨厌它。

它在doInBackground()中运行for循环的其余部分,并记录“Percent Progress:”和“Sleeping”,但不再记录“Progress Update:”。

NullPointerException位于第31行,即pB.setProgress(progress [0]);

@Override
protected void onProgressUpdate(Integer...progress){
    Log.d(LOG_TAG, "Progress Update: "+progress[0].toString());

    super.onProgressUpdate(progress);
    if(progress[0]!=null){
    pB.setProgress(progress[0]);
    }
}

@Override
protected Boolean doInBackground(Integer...numSeconds){
    Log.d(LOG_TAG, "doInBackground: "+numSeconds[0]);

    try {
        int totalSecs = numSeconds[0].intValue();
        Log.d(LOG_TAG, "Total SECS: "+totalSecs);

        for(int i = 1; i <= totalSecs; i++){
            Log.d(LOG_TAG, "Sleeping "+i);
            Thread.sleep(1000);

            float percentage = ((float)i/(float)totalSecs)*100;
            Log.d(LOG_TAG, "Percentage Progress: "+ percentage);

            Float progress = Float.valueOf(percentage);
            publishProgress(new Float(progress).intValue());
        }
    } catch (InterruptedException e){
        e.printStackTrace();
        return false;
    }
    return true;
}
@Override
protected void onPostExecute(Boolean result){
    Log.d(LOG_TAG, "Post Execute "+ result);

    super.onPostExecute(result);

    pB.setProgress(0);
}

以下是我的主要帖子中的一些内容:

初始化进度条:         timer =(ProgressBar)findViewById(R.id.progressBar);         timer.setProgress(0);

执行asynctask:

OnClickListener startBubbles = new OnClickListener(){

    @Override
    public void onClick(View arg0) {
        new ProgBar(timer).execute(100);
        setAll();
    }       
};

构造函数:

public ProgBar(ProgressBar pB){
    Log.d(LOG_TAG, "Constructor");

}

1 个答案:

答案 0 :(得分:0)

当您访问尚未初始化的值时,会发生空指针异常。

所以对于前。 char a [10];

的System.out.println([3]);

因此,您的代码中必须有一个变量,而不是初始化它。我的数字是第二,但我不确定。

很抱歉这就是我所知道的