java - 显示错误\. java.lang.NullPointerException : Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference

标签 java android android-studio

我正在创建测验应用程序。当所有问题都得到解答后。我设定了开放评分 Activity 的 Intent 。但应用程序崩溃并在设置 Activity 中显示错误 结构(MainActivity -> CategoryActivity -> SetsActivity -> QuestionActivity -> ScoreActivity)

这是日志猫

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.marsad.quiz/com.marsad.quizapp.SetsActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2890)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2968)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1672)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:192)
        at android.app.ActivityThread.main(ActivityThread.java:6711)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:826)
     Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference
        at com.marsad.quizapp.SetsActivity.onCreate(SetsActivity.java:68)
        at android.app.Activity.performCreate(Activity.java:7181)
        at android.app.Activity.performCreate(Activity.java:7172)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2843)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2968) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1672) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:192) 
        at android.app.ActivityThread.main(ActivityThread.java:6711) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:826) 

从 CategoryActivity 传递

    public static List<CategoryModel> list;

这一行有错误

        sets = CategoryActivity.list.get(getIntent().getIntExtra("position", 0)).getSets();

这是SetsActivity.java

public class SetsActivity extends AppCompatActivity {

    private GridView gridView;
    private List<String> sets;
    private InterstitialAd mInterstitialAd;
    //Theme
    Constant constant;
    SharedPreferences app_preferences;
    int appTheme;
    int themeColor;
    int appColor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        app_preferences = PreferenceManager.getDefaultSharedPreferences(this);
        appColor = app_preferences.getInt("color", 0);
        appTheme = app_preferences.getInt("theme", 0);
        //defaultColor = app_preferences.getInt("default", 0);
        themeColor = appColor;
        constant.color = appColor;

        if (themeColor == 0){
            setTheme(Constant.theme);
        }else if (appTheme == 0){
            setTheme(Constant.theme);
        }else{
            setTheme(appTheme);
        }

        setContentView(R.layout.activity_sets);

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        if (getSupportActionBar() != null) {
            getSupportActionBar().setTitle(getIntent().getStringExtra("title"));
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }

        gridView = findViewById(R.id.gridView);



        sets = CategoryActivity.list.get(getIntent().getIntExtra("position", 0)).getSets();



        GridAdapter adapter = new GridAdapter(sets, getIntent().getStringExtra("title"), mInterstitialAd);

        gridView.setAdapter(adapter);

    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {

        if (item.getItemId() == android.R.id.home) {
            finish();
        }

        return super.onOptionsItemSelected(item);
    }


}


最佳答案

您的问题是正确的 sets = CategoryActivity.list.get(getIntent().getIntExtra("position", 0)).getSets();

CategoryActivity.list 实际上为空

请检查对象是否已初始化或不在列表中,因此在访问检查之前 -

if(CategoryActivity.list != null){
   sets = CategoryActivity.list.get(getIntent().getIntExtra("position", 0)).getSets();
   GridAdapter adapter = new GridAdapter(sets, getIntent().getStringExtra("title"), mInterstitialAd);

    gridView.setAdapter(adapter);
}

希望这对您有帮助。

关于java - 显示错误\. java.lang.NullPointerException : Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60666131/

相关文章:

Java WebStart 第一次运行看不到参数

android - Android 下的 unix 实用程序

android - 原因:无效的区 block 类型[Android]

java - 如何在 Windows 10 中安装 Processing-Java?

java - 包与 java 代码中的类型冲突

android - 以菊花链方式连接 Android Loader 是个坏主意吗?

android - 将 Wally 导入 Android Studio

Android Studio - 启动模拟器 AVD - "unable to locate adb"

java - 如何将二进制与枚举一起使用?

Android View 管理