编辑:我将此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");
}
答案 0 :(得分:0)
当您访问尚未初始化的值时,会发生空指针异常。
所以对于前。 char a [10];
的System.out.println([3]);
因此,您的代码中必须有一个变量,而不是初始化它。我的数字是第二,但我不确定。
很抱歉这就是我所知道的