java - 使用 Intent 传递整数会导致空对象引用
问题描述
我在将整数值传递给另一个活动的方法中提出了新的意图。但是,我在接收端收到空对象引用/空指针异常。这是调用方法(Insect 是自定义类型,ID 为整数)
private void openInsectDetails(Insect insect){
Intent intent = new Intent(InsectCatchable.this, InsectDetails.class);
intent.putExtra("InsectDetails", insect.getId());
InsectCatchable.this.startActivity(intent);
}
这是接收类:
package com.ac_companion.wegner;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import java.util.ArrayList;
public class InsectDetails extends AppCompatActivity {
private final String TAG = "InsectDetails";
private int insectPositionMarker;
private Insect localInsect;
public int insectId;
//private Intent mIntent = new Intent();
public InsectDetails(){
Intent mIntent = getIntent();
insectId = mIntent.getIntExtra("InsectDetails", 0);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_insect_details);
localInsect = Util.getGlobalInsectList().get(insectId);
}
}
这是例外:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.ac_companion.wegner, PID: 16344
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.ac_companion.wegner/com.ac_companion.wegner.InsectDetails}: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Intent.getIntExtra(java.lang.String, int)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2548)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Intent.getIntExtra(java.lang.String, int)' on a null object reference
at com.ac_companion.wegner.InsectDetails.<init>(InsectDetails.java:20)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newActivity(Instrumentation.java:1078)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2538)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
为什么我mIntent.getIntExtra
的对象是空对象?据我所知,它已正确初始化。
解决方案
我认为这是因为活动生命周期。您不应该在活动中使用构造函数。只需在方法中移动您的@OnCreate
代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_insect_details);
Intent mIntent = getIntent();
insectId = mIntent.getIntExtra("InsectDetails", 0);
localInsect = Util.getGlobalInsectList().get(insectId);
}
您会得到一个异常,因为您试图在创建活动之前获得意图。
推荐阅读
- javascript - 如何通过自定义控制器添加副作用以在 Strapi 中创建新记录?
- python - 使用 python (scipy) 提高 Sylvester 方程的求解精度
- html - 如何防止使用 CSS 加载?
- numpy - 在 PyTorch 变换中使用 skimage 特征提取器
- jquery - JQuery datepicker 默认日期和多个 datepicker
- oracle - Oracle 自治连接的 ODP.Net Core Appsettings.json 配置
- flutter - 防止 Flutter Flat Button 换行的最佳方法
- javascript - 你如何遍历对象以在 Typescript 中设置其值?
- sql - 尝试使用 postgis 创建一条具有两条平行线的路线
- gtk - GTK 触摸板事件 - 滚动 - 如何控制/停止它