我想创建一个变量来包含 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);
}
});
}
}
错误堆栈
block 引用>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/