【发布时间】:2014-05-26 15:32:06
【问题描述】:
我有另一个类,它需要在我的 UI 中更新进度条,同时进行处理。 我尝试了 2 种方法,都将我的 ProgressBar 变量设置为 null,所以我最终总是得到 NullPointerException:
方法一)
MyClass tmp = new MyClass();
tmp.setProgressBar(myprg); // myprg is ProgressBar variable and already have value from findViewById function
然后在 MyClass 中:
public void SetProgressBar(ProgressBar prg)
{
localprg = prg; // I put breakpoint here, it's null after assignment
}
方法二)
MyClass tmp = new MyClass(container.getContext());
tmp.findProgressBar();
在 MyClass 中:
public class void findProgressBar()
{
localprg = (ProgressBar) ((Activity)c).findViewById(R.id.progress_bar);
}
都失败了,都使得 localprg = null。
【问题讨论】:
-
IS myprg 也为空?
-
myprg 在我自己的类(调用者类)中不,它不为空。但是在 MyClass 中,它突然变成了 null
-
所以首先获取 myPrg 的实例
-
当你离开 SetProgress 栏,或者当你退出 findProgressBar() 时它会被清空?在Java中所有都是作为值传递的,意味着ProgressBar是一个本地值,当SetProgressbar离开时不再活跃,得到null,你通过引用localprg分配了value变量,意味着,这也得到null。
-
不,localprg 是整个类的局部变量,而不是该函数的局部变量。任何@GiruBhai:我已经在我自己的类(调用者类)中有 myPrg 的实例,所以我将它传递给另一个类中的那个函数,它在那里变为 null,所以它将 null 分配给已经为 null 的局部变量