2011-08-27 17 views
3

これは私の質問です:ユーザーが第1の状態を選択するまで、私は2つのスピナー「国家」と「市」が、市は空になりますを持っていますどのようには、状態スピナーが選択された後、市内のスピナーを移入

jsonデータを使用して私のスピナーを動的に構築していますが、状態スピナーの値が!= 0になると、下のコードで状態スピナーの項目値を使用し、私の都市に対して別のデータベース呼び出しを行います。

都市データを保持する新しいArrayAdapterを作成すると、唯一のエラーが表示されます。私の活動のために自分のコードをすべて掲載するのは嫌ですが、私の問題がどこにあるのかはわかりません。

public class SearchActivity extends Activity{ 
    private static final String TAG = "MyApp"; 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.search_layout); 

      final Spinner zipspinner = (Spinner) findViewById(R.id.zipspinner); 
      final Spinner cityspinner = (Spinner) findViewById(R.id.cityspinner);   

      JSONArray jsonArray; 
      final JSONArray cityArray; 

      try { 
//GET STATE VALUES FROM DATACALL (DATABASE) 
       String spinnerContentType = "state"; 
       String spinnerURL = "getStoreState.php"; 
       String spinner_data = DataCall.getJSON(spinnerURL,spinnerContentType); 

       jsonArray = new JSONArray(spinner_data); 

       final String[] array_spinner = new String[jsonArray.length()]; 


       for (int i=0; i<jsonArray.length(); i++) 
       { 



        String styleValue = jsonArray.getJSONArray(i).getString(0); 

        array_spinner[i] = styleValue; 

       } 
    //ADD STATE VALUES TO SPINNER   
       ArrayAdapter<String> adapter = 
        new ArrayAdapter<String> (this, 
          android.R.layout.simple_spinner_item,array_spinner); 

       adapter.setDropDownViewResource(R.layout.state_spinner_layout); 
       zipspinner.setAdapter(adapter); 

       zipspinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

        public void onItemSelected(AdapterView<?> arg0, View arg1, 
          int arg2, long arg3) { 


         int item = zipspinner.getSelectedItemPosition(); 

      //IF ITEM IN STATE IS SELECTED NOW GET CITIES FROM DATABALL   
         if(item != 0){ 



          try { 
           String item_value = array_spinner[item]; 
           String spinnerContentType = "city"; 
           String spinnerURL = "getStoreCity.php?state=" + item_value; 
           String city_data = DataCall.getJSON(spinnerURL,spinnerContentType); 

           cityArray = new JSONArray(city_data); 

           final String[] city_spinner = new String[cityArray.length()]; 


           for (int i=0; i<cityArray.length(); i++) 
           {      
            String styleValue = cityArray.getJSONArray(i).getString(0);     
            city_spinner[i] = styleValue;        
           } 
        //THIS IS WHERE MY ISSUE IS TRYING TO ADD THE CITIES TO THEIR SPNNER    
           ArrayAdapter<String> adapter2 = 
            new ArrayAdapter<String> (this, 
              android.R.layout.simple_spinner_item,city_spinner); 

           adapter2.setDropDownViewResource(R.layout.city_spinner_layout); 

           cityspinner.setAdapter(adapter2); 

           cityspinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

            public void onItemSelected(AdapterView<?> arg0, View arg1, 
              int arg2, long arg3) { 
             int item = cityspinner.getSelectedItemPosition(); 


             if(item != 0){ 
              String item_value = array_spinner[item]; 
              String nameContentType = "name"; 
              String shopURL = "getStoreList.php?city=" + item_value; 

              String name_data = DataCall.getJSON(shopURL,nameContentType); 

              Bundle bundle = new Bundle(); 
              bundle.putString("shopData", name_data); 
              Log.v(TAG,name_data); 

               /** Intent myIntent = new Intent(SearchActivity.this, ShowRestaurant.class); 
               myIntent.putExtras(bundle); 
               startActivityForResult(myIntent, 0); */ 
              } 
             else { 
              // finish(); 
             } 



            } 

            public void onNothingSelected(AdapterView<?> arg0) { 
            } 

           }); 


          }catch (JSONException e) { 
           // TODO Auto-generated catch block 
           e.printStackTrace(); 
          } 



          } 
         else { 
          // finish(); 
         } 



        } 

        public void onNothingSelected(AdapterView<?> arg0) { 
        } 

       }); 


      }catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 





     } 

} 
+0

エラーを投稿してください – Jack

答えて

1

は、最初にすべてのあなたのAdapter sおよびStringの配列を設定し、あなたが都市のためのデータを得ながら、そしてちょうどadapter.notifyDatasetChanged()を呼び出します。このような何か:zipspinnerため

String city_values[] = new String[]{"Please select a state."}; 
ArrayAdapter<String> adapter2 = new ArrayAdapter<String> (this,android.R.layout.simple_spinner_item, city_spinner); 
adapter2.setDropDownViewResource(R.layout.city_spinner_layout); 
cityspinner.setAdapter(adapter2); 

OnItemSelectedListenerを実装します。

zipspinner.setOnItemSelectedListener(new OnItemSelectedListener() 
{ 
    public void onItemSelected(AdapterView<?> parent,View view, int pos, long id) { 
     String value = state_values[pos]; 
     // now get your city list against value.   
     city_values = yourWayOfGettingData(value); 
     adapter2.notifyDatasetChanged(); 
    } 

    public void onNothingSelected(AdapterView parent) { 
     // Do nothing. 
    } 

}); 
+0

方向性ありがとうございます。私は今テストするためにそれを実装しています。 +1が確認されました。 – Denoteone

関連する問題