onProgressUpdate() 中的 NullPointerException
Posted
技术标签:
【中文标题】onProgressUpdate() 中的 NullPointerException【英文标题】:NullPointerException in onProgressUpdate() 【发布时间】:2014-01-02 07:03:09 【问题描述】:编辑:我把这个 pB = (ProgressBar) findViewById(R.id.progressBar);
放在 onPreExecute() 中。它有效,一切正常。但这是一个好的解决方案吗?我知道在我的主线程中,进度条是!null。但是在这个 findViewById 之前,我的 asynctask 就是找不到我想要的进度条,尽管我以为我是在 .execute() 中传递它。
这是我第一次使用 asynctask。我有一个想要计数的进度条,但我不断收到 NullPointerException。
日志读取“进度更新:1”,但随后 VM 关闭。所以我知道一个整数正在通过,但我不知道为什么它找不到进度条(pB)。我试图在主线程中的 onPreExecute() 中设置Progress(0),但机器讨厌它。
它在 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);
执行异步任务:
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");
【问题讨论】:
疯狂猜测。 pB 为空! 我认为您可能正在做某事。但是我怎样才能让它不为空呢?我必须在我的 asyncTask 中再次 findViewById 吗?它应该从主线程传递,对吧? @user3067903 检查你是否在任何地方初始化了pB
。 “应该是从主线程传递过来的吧?”您是将它传递给 asynctask 还是 asynctask 是活动类的内部类?
findViewById 可以返回 null。
帮助我理解。您的 asynctask 是 ProgBar 并且您将进度条对象计时器传递给构造函数。你把它分配给pB吗? pB = 计时器?
【参考方案1】:
访问尚未初始化的 value 时发生空指针异常。
所以对于前。字符 a[10];
System.out.println(a[3]);
因此,您的代码中必须有变量,您无需初始化即可访问它。我的事情 numSecond 但我不确定。
抱歉,我知道的就这么多
【讨论】:
以上是关于onProgressUpdate() 中的 NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章
onProgressUpdate 上的 ArrayIndexOutOfBoundsException 错误
Android,AsyncTask 不调用 onProgressUpdate 和 onPostExecute
如何更新所有片段? onProgressUpdate 不更新所有片段
在从 Internet 下载数据期间,在 AsyncTask 的 onProgressUpdate 中显示确定的 ProgressBar
如何使用 Runnable 回调替换 AsyncTask onProgressUpdate()
AsyncTask doinbackground onProgressUpdate onCancelled onPostExecute的基本使用