我有2个活动,我使用第二个活动从第一个访问此功能,这给了我错误。错误来自第3行。
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
);
}
这是完整的日志:
java.lang.NullPointerException
at android.content.ContextWrapper.getResources(ContextWrapper.java:94)
at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:78)
at android.view.View.<init>(View.java:3568)
at android.view.ViewGroup.<init>(ViewGroup.java:469)
at android.widget.LinearLayout.<init>(LinearLayout.java:168)
at android.widget.TableRow.<init>(TableRow.java:61)
at com.example.cool.appname.MainActivity.creeare(MainActivity.java:65)
at com.example.cool.appname.MainActivity.redim(MainActivity.java:254)
at com.example.cool.appname.Matrice2Activity.Egal(Matrice2Activity.java:225)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at android.view.View$1.onClick(View.java:3964)
at android.view.View.performClick(View.java:4633)
at android.view.View$PerformClick.run(View.java:19330)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
如果它是相关的,那么这就是我打算从第二个开始使用MainActivity的意图:
Intent incercare = new Intent(Matrice2Activity.this, MainActivity.class);
incercare.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(incercare);
有什么问题?
答案 0 :(得分:0)
因此,您的Matrice2Activity
正在投放,这意味着您的MainActivity
已暂停甚至停止。并且您正在使用暂停或已停止的活动创建TableRow
作为参数。我怀疑通过引用未运行的活动来创建任何View
对象是不合法的。
并且确定从另一个活动调用一个活动的方法是不正确的。因为Android负责创建和销毁它们,没有任何东西可以保证你的其他活动就在那里。 (想象一下,您处于Matrice2Activity
活动中,您的应用程序到达后台,然后由于缺少资源而完全停止,然后用户想要切换回来,应用程序重新启动并重新创建Matrice2Activity
,但是当时程序中甚至不存在MainActivity
的实例!)你必须已经做了一些hackish才能在MainActivity
内获得Matrice2Activity
实例的引用。
将某些信息从活动返回到上一个活动的正确方法是使用startActivityForResult启动活动,然后使用setResult返回结果。这样,您就可以通过两种方式转发Bundle
任何数据。
PS:以这种方式转发数据是乏味的,看起来效果不佳。有时最好在一个活动中包含更多功能,然后只是改变视图。
答案 1 :(得分:-2)
试试这个:
在Activity2中为函数编写一个Activity1参数,然后将其添加到产生NullPointerException的行中。就像:
public function activity2Function(Activity1 activity1) {
siruri[i] = new TableRow(activity1);
}