2017-05-13 5 views
0

Governorates_nameedt(EditText)をクリックするとAlertDialogでGovernorates_namesを表示し、state_namesの値を選択した値に応じてArrays.asListが変更されます。 state_nameedt(EditText)の.create().show();にエラーがあります。androidの配列の値を変更する

私のコード

Governorates_names = Arrays.asList("Ad Dakhiliyah" 
       ,"Ad Dhahirah" 
       ,"Al Batinah North" 
       ,"Al Batinah South" 
       ,"Al Buraimi" 
       ,"Al Wusta" 
       ,"Ash Sharqiyah North" 
       ,"Ash Sharqiyah South" 
       ,"Dhofar" 
       ,"Muscat" 
       ,"Musandam"); 
     if(String.valueOf(Governorates_nameedt.getText().toString()).equals("Ad Dakhiliyah")) 
      state_names = Arrays.asList("Nizwa","Samail","Bahla","Al Hamra","Manah","Izki","Adam" ); 

     else if(String.valueOf(Governorates_nameedt.getText().toString()).equals("Ad Dhahirah")) 
      state_names = Arrays.asList("Ibri","Yanqul","Dhank"); 

     else if(String.valueOf(Governorates_nameedt.getText().toString()).equals("Al Batinah North")){ 
      state_names = Arrays.asList("Sohar","Shinas","Liwa","Saham","Al Khaburah","Suwayq"); 

     }else if(String.valueOf(Governorates_nameedt.getText().toString()).equals("Al Batinah South")){ 
      state_names = Arrays.asList("Nakhal","Wadi Al Maawil","Al Musanaah","Barka","Rustaq"); 

     }else if(String.valueOf(Governorates_nameedt.getText().toString()).equals("Al Buraimi")){ 
      state_names = Arrays.asList("Al Buraimi","Mahdah","Al Sinas"); 

     }else if(String.valueOf(Governorates_nameedt.getText().toString()).equals("Al Wusta")){ 
      state_names = Arrays.asList("Haima","Duqm","Mahout","Al Jazur"); 

     }else if(String.valueOf(Governorates_nameedt.getText().toString()).equals("Ash Sharqiyah North")){ 
      state_names = Arrays.asList("Ibra","Al-Mudhaibi","Bidiyah","Wadi Bani Khaled","Dema Wa Thaieen","Al Qabil"); 

     }else if(String.valueOf(Governorates_nameedt.getText().toString()).equals("Ash Sharqiyah South")){ 
      state_names = Arrays.asList("Masirah","Sur","Jalan Bani Bu Hassan","Jalan Bani Bu Ali","Al Kamil Wal Wafi"); 

     }else if(String.valueOf(Governorates_nameedt.getText().toString()).equals("Dhofar")){ 
      state_names = Arrays.asList("Salalah","Taqah","Mirbat","Thumrait","Sadah","Rakhyut","Dhalkut","Muqshin","Shalim and the Hallaniyat Islands","Al-Mazyona"); 

     }else if(String.valueOf(Governorates_nameedt.getText().toString()).equals("Dhofar")){ 
      state_names = Arrays.asList("Muttrah","Bawshar","Seeb","Al Amarat","Qurayyat"); 

     }else if(String.valueOf(Governorates_nameedt.getText().toString()).equals("Musandam")){ 
      state_names = Arrays.asList("Khasab","Bukha","Daba Al Bayah","Madha"); 


     } 

     final ArrayAdapter<String> Governorates_name_Opt = new ArrayAdapter<>(personal_info.this, android.R.layout.simple_spinner_dropdown_item, Governorates_names); 
     final List<String> finalOpt1 = Governorates_names; 
     Governorates_nameedt.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       new AlertDialog.Builder(personal_info.this) 
         .setTitle("Select ") 
         .setAdapter(Governorates_name_Opt, new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 
           Governorates_nameedt.setText(finalOpt1.get(which).toString()); 
           dialog.dismiss(); 
          } 
         }).create().show(); 
      } 
     }); 
     final ArrayAdapter<String> state_name_Opt = new ArrayAdapter<>(personal_info.this, android.R.layout.simple_spinner_dropdown_item, state_names); 
     final List<String> finalOpt2 = state_names; 
     state_nameedt.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       new AlertDialog.Builder(personal_info.this) 
         .setTitle("Select ") 
         .setAdapter(state_name_Opt, new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 
           state_nameedt.setText(finalOpt2.get(which).toString()); 
           dialog.dismiss(); 
          } 
         }).create().show(); 
      } 
     }); 

私のエラー

5月13日16:42:25.720 8190から8190/com.example.hamdaalissaei.final_flahのW/dalvikvm:1 =スレッドID:キャッチされない例外(グループ= 0xa61a1908)で終了するスレッド 05-13 16:42:25.724 8190-8190/com.example.hamdaalissaei.final_flah E/AndroidRuntime:致命的例外:メイン java.lang.NullPointerException android.widget.ArrayAdapter.getCount(ArrayAdapter.java:330) android.widget.ListView.setAdapter(ListView.java:462) android.support.v7.app.AlertController.setupView(AlertController.java:538) ) android.support.v7.app.AlertController.installContent(AlertController.java:226) android.support.v7.app.AlertDialog.onCreate(AlertDialog.java:257) android.app.Dialog.dispatchOnCreate (Dialog.java:355) android.app.Dialog.show(Dialog.java:260) at com.example.hamdaalissaei.final_flah.personal_info $ 6.onClick(personal_info.java:247) android.vi ew.View.performClick(View.java:4204) android.view.View $ PerformClick.run(View.java:17355) (android.os.Handler.handleCallback(Handler.java:725) 、android)にあります。 os.Handler.dispatchMessage(Handler.java:92) (android.os.Looper.loop(Looper.java:137) android.app.ActivityThread.main(ActivityThread.java:5041) at java.lang。メソッド.invokeNative(ネイティブメソッド) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793) com.android.inでternal.os.ZygoteInit.main(ZygoteInit.java:560) at dalvik.system.NativeStart.main(ネイティブメソッド) 05-13 16:42:25.724 466-835/system_process W/ActivityManager:強制終了アクティビティcom。

.personal_info example.hamdaalissaei.final_flahは/あなたのスタックトレースから、この問題

+0

を防ぐために新しいList<String>()最初にstate_namesを開始スタックトレース – Mercato

+0

を貼り付けてください@ Mercatoは私の質問を更新します – Hamda

答えて

0

を解決するために私を助けてください。あなたの配列の

8190/com.example.hamdaalissaei.final_flah E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerException at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:330) at 

一つの入力がNULLであると考えられるよう、あなたが入れました。あなたのコードから、state_namesが問題であるようです。実際にはif else文のどれも実際に動作していません。入力した配列から配列のサイズを見つけるためにしようと何であるかArrayAdapterがないので

else if(String.valueOf(Governorates_nameedt.getText().toString()).equals("Musandam")){ 
     state_names = Arrays.asList("Khasab","Bukha","Daba Al Bayah","Madha"); 
    } else { 
     state_names = new List<String>(); 
} 

を入れてみてください、そして、state_namesがnullであると思われます。

編集:state_namesは、EditText Governorates_nameedtの値で決定されているようです。 EditTextは、編集するたびに作成したif elseループと呼ばれる魔法のようなものではありません。 TextWatcherを追加し、それを行うには:

Governorates_nameedt.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      //Put your if else loop HERE 
     } 
    }); 

ユーザーが何かを置く前に、あなたが最初のコードを実行すると、ちょうどNullPointerError

+0

はい、それは私に空のリストを示しています...私はstate_namesアイテムをどのように表示できますか? – Hamda

+0

編集された返信@ハムダ – Mercato

関連する問題