两个活动之间的java.lang.NullPointerException
我有两个活动,我使用第二个活动从第一个活动访问这个函数,这给了我一个错误。错误来自第三行两个活动之间的java.lang.NullPointerException,java,android,Java,Android,我有两个活动,我使用第二个活动从第一个活动访问这个函数,这给了我一个错误。错误来自第三行 for(i = 0; i < linii; i++) { siruri[i] = new TableRow(this); //this line causes the error TableLayout.LayoutParams detalii = new TableLayout.LayoutParams( TableLa
for(i = 0; i < linii; i++)
{
siruri[i] = new TableRow(this); //this line causes the error
TableLayout.LayoutParams detalii = new TableLayout.LayoutParams(
TableLayout.LayoutParams.MATCH_PARENT,
TableLayout.LayoutParams.MATCH_PARENT
);
}
有什么问题吗?试试这个:
在Activity2中为函数编写Activity1参数,然后将其添加到生成NullPointerException的行中。就像:
public function activity2Function(Activity1 activity1) {
siruri[i] = new TableRow(activity1);
}
因此,您的
Matrice2Activity
此时正在运行,这意味着您的main活动已暂停甚至停止。您正在创建TableRow
,并将暂停或停止的活动作为参数。我怀疑通过引用未运行的活动来创建任何视图对象是不合法的
当然,从另一个活动调用一个活动的方法是不正确的。因为Android负责创建和销毁它们,没有任何东西可以保证其他活动会出现。(假设您处于Matrice2Activity
活动中,您的应用程序到达后台,然后由于资源不足而完全停止,然后用户想要切换回来,应用程序重新启动并重新创建Matrice2Activity
,但程序中甚至不存在MainActivity
的实例此时ram!)您必须已经做了一些黑客操作,以获取Matrice2Activity
中MainActivity
实例的引用
将活动中的某些信息返回到上一个活动的正确方法是使用开始活动,然后使用返回结果。通过这种方式,您可以通过两种方式将任何数据转发到包中
PS:以这种方式转发数据是乏味的,而且看起来是无效的。有时,最好在一个活动中打包更多功能,只是随意移动视图。请在原始帖子中添加堆栈跟踪。MainActivity的65行是什么?这是代码中的第3行,我必须删除其余部分才能编辑它。请看我的答案。显然,这是另一个过早的上下文用法(或新建ActivityDerivedClass()
)…请了解activitie的生命周期哦,来吧@Tom,@Selvin显然OP仍会将此传递给activity2Function
,因此会遇到同样的问题?是的,我也这么认为。hackish:)。。。很可能是newmainActivity()
谢谢!我更改了代码并使用了startActivityForResult(),现在它可以工作了。太好了。感谢的最好方式是投票和/或接受答案。;-)
Intent incercare = new Intent(Matrice2Activity.this, MainActivity.class);
incercare.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(incercare);
public function activity2Function(Activity1 activity1) {
siruri[i] = new TableRow(activity1);
}