1. ホーム
  2. android

[解決済み] android studioです。NULLオブジェクトの参照で仮想メソッドを呼び出そうとする

2022-02-17 06:42:14

質問

この質問は何度もされていますが、以前の回答では私の問題を解決することができませんでした。私は、非アクティビティクラスで大きな文字列配列を使用し、使用されたときに任意のアクティビティで配列を返すアプリを作っています。アプリはコンパイル中にエラーを出さなかったのですが、途中でクラッシュしてしまいます。 私のコードは次のとおりです。

String[] busNamesSearch;

GetDBClass BDclassBuses;
AutoCompleteTextView searchView;
String BSquery;
Button searchButton;

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


    busNamesSearch = BDclassBuses.GetBusNameArrays();
    searchView = (AutoCompleteTextView) findViewById(R.id.searchBusesView);
    searchButton = (Button)findViewById(R.id.searchBusButton);
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(this, 
    android.R.layout.simple_list_item_1, busNamesSearch);
    searchView.setThreshold(1);
    searchView.setAdapter(arrayAdapter);

エラーログは

07-17 18:09:21.332 2548-2548/com.prinia.gaurav.Ppbus E/AndroidRuntime: FATAL EXCEPTION: main
                                                                     Process: com.prinia.gaurav.Ppbus, PID: 2548
                                                                     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.prinia.gaurav.punebus/com.prinia.gaurav.Ppbus.SearchBusActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] com.prinia.gaurav.Ppbus.GetDBClass.GetBusNameArrays()' on a null object reference
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
                                                                         at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
                                                                         at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                         at android.os.Looper.loop(Looper.java:154)
                                                                         at android.app.ActivityThread.main(ActivityThread.java:6077)
                                                                         at java.lang.reflect.Method.invoke(Native Method)
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
                                                                      Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] com.prinia.gaurav.Ppbus.GetDBClass.GetBusNameArrays()' on a null object reference
                                                                         at com.prinia.gaurav.Ppbus.SearchBusActivity.onCreate(SearchBusActivity.java:26)
                                                                         at android.app.Activity.performCreate(Activity.java:6662)
                                                                         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
                                                                         at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
                                                                         at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                         at android.os.Looper.loop(Looper.java:154) 
                                                                         at android.app.ActivityThread.main(ActivityThread.java:6077) 
                                                                         at java.lang.reflect.Method.invoke(Native Method) 
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

問題が発生していると思われるエラー行は

busNamesSearch = BDclassBuses.GetBusNameArrays();

もうどうしたらいいかわからない。あらゆる方法を試してみた。

どうすればいいですか?

今後の参考のためにメモしておきます。Nullポインタは、クラスのメソッドや変数を初期化せずにアクセスした場合に発生します。非常に素朴なバージョンでは、null.somethingを実行するたびに発生します。

もし、NULLポインタに直面したら、NULL.somethingを実行したかどうかを確認してください。

そして、クラス参照は、オブジェクトが生成されない時点までNULLです。通常、オブジェクトの生成行は次のようになります。

ClassName referenceName = new ClassName()

ここで、=の右側の部分は、=記号の左側にある参照名を使ってアクセスできるオブジェクトを作成しています。