2017-09-04 3 views
0

Ich habe ein Spinner auf meinem Fragment, die Daten auf diesem Spinner wird von JSON aus meiner Datenbank aufgefüllt. Das Problem, das ich habe, ist, dass es immer dieselben Daten auf meinem Spinner wiederholt.Android-Spinner behält den gleichen Wert bei

Beispiel:

Basketball Baseball Fußball

Immer, wenn ich Registerkarten wechseln und zurück, dies zu meinem Spinner passiert.

Basketball Baseball Fußball Basketball Baseball Fußball

Hier ist mein Code für Daten auf meinem Spinner

public class Games extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.games, container, false); 
     spinner1 = (Spinner) rootView.findViewById(R.id.sp1); 
getSpinner(); 




     return rootView; 
} 

private void getSpinner(){ 
     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; 


      e_name = new String[JA.length()]; 
      e_gender = new String[JA.length()]; 

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



     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
+0

erstellen Sie können mit Retrofit oder zumindest OkHttp in Ihrem Andro wollen betrachten ID-Projekte. Es ist viel einfacher und besser optimiert als 'HttpURLConnection' zu verwenden und json manuell zu analysieren. – Vucko

Antwort

1

Sie müssen das Abrufen Ihrer Arraylist Daten löschen.

list1.clear(); 

sollten Sie dies beim Start setzen von getSpinner() Methode.

+0

wo soll ich das hinstellen? – orange

+0

@orange Es löscht Ihre * Arraylist * Daten, die hinzugefügt werden. Und während Sie die Registerkarten wechseln und wieder ruft * getSpinner * -Methode die Daten werden zuerst gelöscht und dann wieder diese Daten hinzufügen.So, dass Daten nicht immer wieder wiederholt werden. Klar ? –

+0

@orange Sie sollten dies am Anfang von * getSpinner() * Methode setzen. –

1

dies geschieht, weil Sie wieder getSpinner anrufen und es Ihre Liste ist bevölkern ... Sie können Ihre Liste zu Beginn des Verfahrens

private void getSpinner() 
{ 
    list1.clear(); 

    try{ 
.... 
} 

oder Sie können einen boolean

private void getSpinner() 
{ 
    try 
    { 
     .... 
     isListPopuplated = true; 
    } 
} 
verwenden löschen

und dann überprüfen es

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.games, container, false); 
    spinner1 = (Spinner) rootView.findViewById(R.id.sp1); 

if(!isListPopulated) 
{ 
    getSpinner(); 
} 




    return rootView; 
Verwandte Themen