java - Class.forName() 不断显示错误 : java. lang.NullPointerException

标签 java android json android-intent nullpointerexception

我想创建一个变量来包含 Activity.class,以便我可以动态更改要有意调用的 Activity。我希望 startBtn 启动最后一个播放级别的 Activity 的 Intent ,我将以 json 格式存储在设备内部。但是,当我尝试使用 forName() 函数调用 Activity 类时,我不断显示错误。

主要 Activity.class

 public class MainActivity extends Activity {

     Button startBtn, chooseLevelBtn;
     Class classVariable;

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);

         startBtn = (Button) findViewById(R.id.startBtn);
         chooseLevelBtn = (Button) findViewById(R.id.chooseLevelBtn);

         try {
             /*
              * Set class Variable so that I can dynamically change the Activity
              * to be called with intent.
              * Testing the variable with Level001Activity, but app keep crashing
              * when startBtn is pressed with stack error I post below
              */
             classVariable = Class.forName("com.ed.pieces.Level001Activity");
         } catch (ClassNotFoundException e) {
             e.printStackTrace();
         }

         startBtn.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 Intent i = new Intent(getApplicationContext(),
                    classVariable);
                 startActivity(i);
             }
         });
    }
}

错误堆栈

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Class.getName()' on a null object reference at android.content.ComponentName.(ComponentName.java:129) at android.content.Intent.(Intent.java:4449) at com.example.ed.pieces.MainActivity$1.onClick(MainActivity.java:35) at android.view.View.performClick(View.java:5198) at android.view.View$PerformClick.run(View.java:21147) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

P.S 我会将最后玩过的关卡信息以 json 格式存储为字符串,例如“com.ed.pieces.Level001Activity”,当用户启动应用程序时,类 classVariable 应包含该应用程序的 Activity 类最后玩过的关卡。

非常欢迎所有建议。预先感谢您。

最佳答案

您的异常来自您的 onClick() 方法及其创建 Intent 的尝试,而不是来自您的 forName() 调用。这是因为您的 forName() 调用由于某种原因失败。

此外,您不需要forName()。替换:

try {
   /*
    * Set class Variable so that I can dynamically change the Activity
    * to be called with intent.
    * Testing the variable with Level001Activity, but app keep crashing
    * when startBtn is pressed with stack error I post below
    */
    classVariable = Class.forName("com.ed.pieces.Level001Activity");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

与:

classVariable = Level001Activity.class;

并添加适当的导入以引入Level001Activity

关于java - Class.forName() 不断显示错误 : java. lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32975166/

相关文章:

python - 在Python中解析来自MapQuest反向地理编码api的数据?

javascript - 如何在我的js数据文件更改时刷新页面

java - 具有逻辑的 Guice AssistedInjection Factory

java - 需要对 Queue 和 LinkedList 实现进行一些说明

java - 为什么我的循环只输出最后一个结果?

java - 将序列化对象写入垃圾文件?

java - 用于下载的 Spring Action 在 Android 浏览器中不起作用

Android搜索蓝牙设备

android - 单击抽屉导航后新 Activity 不会启动

javascript - Viima JQuery Comments - GetUsers(Pinged users) 在部分 View 中显示不正确