2017-02-06 1 views
0

Почему я получаю следующее сообщение об ошибке:Строка не может быть брошена HashMap на Spinner пункте выберите

java.lang.String cannot be cast to java.util.HashMap

Когда я выбираю значение спиннера?

Вот мой код:

ArrayAdapter<String> spinner = new ArrayAdapter<String>(Games.this, layout.simple_spinner_dropdown_item, list1); 
spinner1.setAdapter(spinner); 
spinner1.setSelection(0); 
spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     Intent intent = null; 
     switch (position) { 
      case 1: 
       intent = new Intent(getApplication(), Basketball.class); 
       HashMap map =(HashMap)parent.getItemAtPosition(position); 
       String s_id = map.get(Config.TAG_s_id).toString(); 
       String s_name = map.get(Config.TAG_s_name).toString(); 
       String s_gender = map.get(Config.TAG_s_gender).toString(); 
       intent.putExtra(Config.s_id,s_id); 
       intent.putExtra(Config.s_name,s_name); 
       intent.putExtra(Config.s_gender,s_gender); 
       startActivity(intent); 
       break; 
       ... 
     } 
    } 
}); 

Вот мой LogCat:

java.lang.ClassCastException: java.lang.String cannot be cast to java.util.HashMap     
    at com.example.abe.ateneofiesta.Games$1.onItemSelected(Games.java:277) 
    at android.widget.AdapterView.fireOnSelected(AdapterView.java:924) 
    at android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:913) 
    at android.widget.AdapterView.-wrap1(AdapterView.java) 
    at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:883) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

извлечения значения для блесны

try 
     { 
      URL url = new URL (Config.URL_SPIN); 
      HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 
      is = httpURLConnection.getInputStream(); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is, "UTF-8")); 
      StringBuilder sb = new StringBuilder(); 
      while((line = bufferedReader.readLine()) != null) 
      { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      result = sb.toString(); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     try 
     { 
      JSONArray JA = new JSONArray(result); 
      JSONObject json; 
      s_name = new String[JA.length()]; 
      s_gender = new String[JA.length()]; 

      for(int i = 0; i<JA.length(); i++) 
      { 
       json  = JA.getJSONObject(i); 
       s_gender[i] = json.getString("s_gender"); 
       s_name[i] = json.getString("s_name"); 
      } 
      list1.add("All"); 
      for(int i = 0; i<s_name.length; i++) 
      { 
       list1.add(s_name[i] + " "+s_gender[i]); 
      } 



     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     spinner_fn(); 

    } 
+0

Потому что это не 'HashMap'. –

+0

Как вы добавляете значения в 'list1'? – rafsanahmad007

+0

@ rafsanahmad007 добавил код о том, как я добавляю значения sir –

ответ

0
ArrayAdapter<String> spinner 

когда вы заявляете, что вы никогда не собираюсь получать экземпляр из HashMap через adapter.getItemAtPosition (int), он вернет экземпляр строки String

0

parent.getItemAtPosition(position) возвращает строку, потому что ваш адаптер имеет тип String. Перейдите на ArrayAdapter<Hashmap>, если вы хотите эту функциональность.

+0

Как это сделать? потому что он дает мне ошибку –

0

Ваш счетчик заполняется с помощью строки arraylist..so вы не можете получить Hashmap во onItemSelected

попробовать это:

//Declare hashmap globally 
HashMap<Integer,String> haspMap_name = new HashMap<Integer, String>(); 
HashMap<Integer,String> = new HashMap<Integer, String>(); 

Теперь для заполнения Hashmap использования:

for(int i = 0; i<JA.length(); i++) 
{ 
    json  = JA.getJSONObject(i); 
    s_gender[i] = json.getString("s_gender"); 
    s_name[i] = json.getString("s_name"); 
    haspMap_gender.put(i,s_gender[i]); 
    haspMap_name.put(i,s_name[i]); 
} 

for(int i = 0; i<s_name.length; i++) 
{ 
    list1.add(s_name[i] + " "+s_gender[i]); 
} 

И в течение onItemSelected извлекайте значение, используя ..

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    Intent intent = null; 
    switch (position) { 
     case 1: 
      intent = new Intent(getApplication(), Basketball.class); 

      String spinner_name = parent.getItemAtPosition(position).toString(); 
      String s_name = haspMap_name.get(position); 
      String s_gender = haspMap_gender.get(position); 

      //intent.putExtra(Config.s_id,s_id); 
      intent.putExtra(Config.s_name,s_name); 
      intent.putExtra(Config.s_gender,s_gender); 
      startActivity(intent); 
      break; 
      ... 
    } 
+0

У меня здесь ошибка. sir String spinner_name = parent.getItemAtPosition (position); говорит, что требуется java.lang.string –

+0

list1.add (s_name [i] + "" + s_gender [i]); здесь говорит, что не может быть разрешен methodjava.string –

+0

use 'String spinner_name = parent.getItemAtPosition (position) .toString();' и 'list1.add (s_name [i] +" "+ s_gender [i]);' это было в вашем код ранее .. – rafsanahmad007

Смежные вопросы