两个活动之间的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);
}