2016-09-19 5 views
0

Ich bekomme Daten von der JSON. Ich habe den Namen des Landes entsprechend alphabetisch sortiert. Aber wenn ich auf das Spinner-Item klicke, bekomme ich die Worg-ID des Items. Kann mir jemand sagen, wie ich die ID des sortierten Items vom Spinner bekommen kann.Wie bekomme ich die ID des sortierten Artikels des Spinner?

Das ist mein json: -

{ 
    "Status": 1, 
    "StatusMessage": "Country and Country Area List", 
    "data": [ 
    { 
     "CountryID": "1", 
     "CountryName": "India", 
     "CountryArea": [ 
     { 
      "CountryID": "1", 
      "AreaID": "1", 
      "AreaName": "Kuwait City(Capital)" 
     }, 
     { 
      "CountryID": "1", 
      "AreaID": "2", 
      "AreaName": " Hawally" 
     }, 

     ] 
    }, 
    { 
     "CountryID": "2", 
     "CountryName": "Dubai", 
     "CountryArea": [ 
     { 
      "CountryID": "2", 
      "AreaID": "6", 
      "AreaName": " Jeddah" 
     }, 
     { 
      "CountryID": "2", 
      "AreaID": "7", 
      "AreaName": " Riyadh" 

Dies ist die Methode, mit der ich Daten aus dem json bekommen bin: -

public void requestDataCountry() { 

      mProgressDialog.show(); 
      StringRequest countrylistrequest = new StringRequest(Request.Method.GET, GlobalData.COUNTRYLISTURL, 
        new Response.Listener<String>() { 
         @Override 
         public void onResponse(String response) { 
          try { 

           mProgressDialog.dismiss(); 

           final JSONObject jObject = new JSONObject(response); 
           if (jObject.getString("Status").equals("1")) { 


            JSONArray jsonArray = jObject.getJSONArray("data"); 
            for (int i = 0; i < jsonArray.length(); i++) { 

             JSONObject jsonObject = jsonArray.getJSONObject(i); 
             mCountryName = jsonObject.getString("CountryName"); 
             mId = jsonObject.getString("CountryID"); 
             mCountryList.add(mCountryName); 
             Collections.sort(mCountryList); 
             getCountryId.add(mId); 





             JSONArray jsonArray1 = jsonObject.getJSONArray("CountryArea"); 
             for (int j = 0; j < jsonArray1.length(); j++) { 

              JSONObject jsonObject1 = jsonArray1.getJSONObject(j); 
              String countryAreaId = jsonObject1.getString("CountryID"); 


              mAreaName = jsonObject1.getString("AreaName"); 
              mAreaList.add(mAreaName); 




             } 
            } 





            countryAdapter.notifyDataSetChanged(); 




           } else { 

           } 
          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 
         } 
        }, 
        new Response.ErrorListener() { 
         @Override 
         public void onErrorResponse(VolleyError volleyError) { 




         } 
        }) { 


      }; 

      RequestQueue countryqueue = Volley.newRequestQueue(getContext()); 

      countryqueue.add(countrylistrequest); 

     } 

Das ist mein Spinner-Code: -

@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     inflater.inflate(R.menu.menu, menu); 
     super.onCreateOptionsMenu(menu, inflater); 
     this.menu = menu; 
     MenuItem menuItem = menu.findItem(R.id.menu_spinner).setVisible(true); 
     mCountrySpinner = (Spinner) MenuItemCompat.getActionView(menuItem); 


     countryAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_dropdown_item, mCountryList); 
     countryAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     mCountrySpinner.setAdapter(countryAdapter); 

     mCountrySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 


       mCountrySerachId = getCountryId.get(position); 


       mEditor.putString(KEY_COUNTRY_ID, mCountrySerachId); 
       mEditor.commit(); 



      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 

      } 
     }); 


    } 

Mein Problem ist, wenn ich auf den Spinner Artikel klicke, wie ich klicke auf Dubai (CountryName) nach meinem JSON dann bekomme ich die ID 1 (Coun tryID) .Wenn ich auf Dubai (CountryName) klicke, sollte es die ID 2 (CountryID) bekommen. Ich kannte das Problem, ich sortierte den CountryName, aber ich sortierte die CountryID nicht. Meine Frage ist, wie kann ich die CountryID nach dem CountryName sortieren.

Antwort

0

Speichern Sie Ihre analysierten Werte (ID und Ländername) in einer Hashmap. Dann sortiere die hashmap mit dem folgenden Code.

public LinkedHashMap<Integer, String> sortHashMapByValues(
     HashMap<Integer, String> passedMap) { 
    List<Integer> mapKeys = new ArrayList<>(passedMap.keySet()); 
    List<String> mapValues = new ArrayList<>(passedMap.values()); 
    Collections.sort(mapValues); 
    Collections.sort(mapKeys); 

    LinkedHashMap<Integer, String> sortedMap = 
     new LinkedHashMap<>(); 

    Iterator<String> valueIt = mapValues.iterator(); 
    while (valueIt.hasNext()) { 
     String val = valueIt.next(); 
     Iterator<Integer> keyIt = mapKeys.iterator(); 

     while (keyIt.hasNext()) { 
      Integer key = keyIt.next(); 
      String comp1 = passedMap.get(key); 
      String comp2 = val; 

      if (comp1.equals(comp2)) { 
       keyIt.remove(); 
       sortedMap.put(key, val); 
       break; 
      } 
     } 
    } 
    return sortedMap; 
} 
+0

@ Febi Mathew Sehr geehrter Herr, Ihre Methode ist absolut richtig. aber ich möchte die Liste alphabetisch sortieren. Ihre Methode gibt mir die gleiche ID, aber sie sortiert den Namen des Landes nicht alphabetisch. also sag mir bitte, wie ich den landnamen alphabetisch sortieren kann und danach die gleiche land id gibt. – LoveAndroid

Verwandte Themen