【发布时间】:2021-05-06 13:54:22
【问题描述】:
我正在练习一个安卓应用程序开发和写台球记分板。
public class Board extends AppCompatActivity {
private Rack rack;
private int currentPlayer;
public Board() {
rack = new Rack();
currentPlayer = 0;
}
public void setCurrentPlayer(int n) {
currentPlayer = n;
}
public void pocket(int ballNumber) {
TextView scoreView = (TextView) findViewById(R.id.pocketed0);
scoreView.setText("FOO");
}
}
在 MainActivity 中实例化了这个板子,
public class MainActivity extends AppCompatActivity {
Board board;
String pocketedHistory = "";
String pointString = "";
int points = 0;
String selectedPocket = "S";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
board = new Board();
}
public void pocket5(View v) {
board.pocket(5);
}
pocket5() 在我点击按钮时被调用并引发此异常。
E/AndroidRuntime: 致命异常: main 进程:com.example.android.japan9_ballscorer,PID:10399 java.lang.IllegalStateException:无法执行 android:onClick 的方法 在 androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:414) 在 android.view.View.performClick(View.java:4473) 在 com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992) 在 android.view.View$PerformClick.run(View.java:18799) 在 android.os.Handler.handleCallback(Handler.java:808) 在 android.os.Handler.dispatchMessage(Handler.java:103) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:5341) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641) 在 dalvik.system.NativeStart.main(本机方法) 引起:java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409) 在 android.view.View.performClick(View.java:4473) 在 com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992) 在 android.view.View$PerformClick.run(View.java:18799) 在 android.os.Handler.handleCallback(Handler.java:808) 在 android.os.Handler.dispatchMessage(Handler.java:103) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:5341) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641) 在 dalvik.system.NativeStart.main(本机方法) 引起:java.lang.NullPointerException 在 android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:152) 在 android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:103) 在 android.content.Context.obtainStyledAttributes(Context.java:389) 在 androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:839) 在 androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:806) 在 androidx.appcompat.app.AppCompatDelegateImpl.findViewById(AppCompatDelegateImpl.java:630) 在 androidx.appcompat.app.AppCompatActivity.findViewById(AppCompatActivity.java:223) 在 com.example.android.japan9_ballscorer.Board.pocket(Board.java:21) 在 com.example.android.japan9_ballscorer.MainActivity.pocket5(MainActivity.java:27) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409) 在 android.view.View.performClick(View.java:4473) 在 com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992) 在 android.view.View$PerformClick.run(View.java:18799) 在 android.os.Handler.handleCallback(Handler.java:808) 在 android.os.Handler.dispatchMessage(Handler.java:103) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:5341) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641) 在 dalvik.system.NativeStart.main(本机方法)
有人能解释一下吗?我不知道该怎么办..
【问题讨论】:
-
谢谢大家的回答。我太不耐烦了,停止了 Udacity 的视频并开始写作。我认为通过 findViewById() 让 Board 对象访问视图对我来说是直观和直接的。这就是为什么我愚蠢地让 Board 扩展 AppCompatActivity。
标签: android