[英]Im stuck in Android Studio
我正在創建一個簡單的計算器,我使用了 2 個活動,第一個是登錄表單,第二個是計算器。 登錄表單運行良好,但是當我切換活動時出現問題。 我不明白這個錯誤,它超級長而且復雜。 我在谷歌上搜索了一段時間,但似乎找不到解決方案。
這是計算器代碼:
public class CalculatorActivity extends AppCompatActivity {
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.calculator);
}
private TextView field = (TextView)findViewById(R.id.mainField2);
private String text = field.getText().toString();
public void numbers(View v){
Button numBtn = (Button)v;
String btnTxt = numBtn.getText().toString();
System.out.println(btnTxt);
}
}
這是錯誤
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.mainpackage.apptest, PID: 3971
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mainpackage.apptest/com.mainpackage.apptest.CalculatorActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3365)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:173)
at android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:174)
at android.content.Context.obtainStyledAttributes(Context.java:744)
at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:842)
at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:809)
at androidx.appcompat.app.AppCompatDelegateImpl.findViewById(AppCompatDelegateImpl.java:633)
at androidx.appcompat.app.AppCompatActivity.findViewById(AppCompatActivity.java:259)
at com.mainpackage.apptest.CalculatorActivity.<init>(CalculatorActivity.java:23)
at java.lang.Class.newInstance(Native Method)
at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45)
at android.app.Instrumentation.newActivity(Instrumentation.java:1253)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3353)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
java.lang.NullPointerException:嘗試在空對象引用上調用虛擬方法“android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()”
這意味着您正在嘗試類似的方法: null.aMethod()
。 您正在對null
進行方法調用。
從您的代碼來看,問題來自private TextView field = (TextView)findViewById(R.id.mainField2);
在調用onCreate ()
之前首先執行字段聲明。
你可以像這樣重寫你的代碼
public class CalculatorActivity extends AppCompatActivity {
private TextView field = null;
private String text = null;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.calculator);
field = (TextView)findViewById(R.id.mainField2);
text = field.getText().toString();
}
public void numbers(View v){
Button numBtn = (Button)v;
String btnTxt = numBtn.getText().toString();
System.out.println(btnTxt);
}```
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.