2017-10-10 1 views
0

Ich habe Code 2 Werte von Spinnern Abrufen von Daten JSON-Spinner und zeigen Daten in Toast zu rufen, wenn die Daten ausgewählt ist, aber ich mag von JSON die zweiten Daten nehmen, für Beispiel Typ I wählen "PERMIT" es Code "100" in Toast zeigenWie mit Retrofit2 auf Android

JSON (die mich zu TextView retten wird):

{ 
    "total_results": "3", 
    "value": 1, 
    "status": true, 
    "result": [ 
     { 
      "GroupCode": "I", 
      "Code": "100", 
      "Type": "PERMIT", 
      "MaxTotalReq": "0", 
      "MinRequest": null 
     } 
    ] 
} 

Bisher habe ich versucht, "PERMIT" Ergebnisse von JSON

leaveType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      String selected = parent.getItemAtPosition(position).toString(); 
      Toast.makeText(context, "Choose " + selected, Toast.LENGTH_SHORT).show(); 
     } 
     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 
     } 
    }); 

Mit Antwort anzuzeigen

private void initSpinnerType(){ 
     RetrofitInterface api = RetrofitClient.getClient().create(RetrofitInterface.class); 
     Call<LeaveTypeResponse> call = api.getDataPermit(); 
     call.enqueue(new Callback<LeaveTypeResponse>() { 
      @Override 
      public void onResponse(Call<LeaveTypeResponse> call, Response<LeaveTypeResponse> response) { 
       if (response.isSuccessful()) { 
        List<LeaveType> leaveTypeItems = response.body().getResult(); 
        for (int i = 0; i < leaveTypeItems.size(); i++){ 
         String Code = leaveTypeItems.get(i).getCode(); // I want to show this when Selected 
         String leaveType = leaveTypeItems.get(i).getType(); 
         listSpinner.add(leaveType); 
        } 
        listSpinner.add(0, "- SELECT TYPE -"); 

        adapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, listSpinner); 
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
        leaveType.setAdapter(adapter); 

       } else { 
        Toast.makeText(context, "FAILED", Toast.LENGTH_SHORT).show(); 
       } 
      } 
      @Override 
      public void onFailure(Call<LeaveTypeResponse> call, Throwable t) { 
       t.printStackTrace(); 
       Toast.makeText(context, "CAN'T CONNECT", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 

Wie Setvariable Code zu OnSelectedItem

[EDIT]

String selected = parent.getItemAtPosition(position).toString();

dieser Code zeigt den Wert des leaveType Variable mit dem Wert "PERMIT" ich mit dem Wert dieser ausgewählten zeigt die Variable aus-Code benötigen "100"

+0

Sie haben alle Liste der Codes in Spinner? – sushildlh

+0

Welche Liste von Codes in Spinner? – Aldan

+0

Was sind Werte in Ihrem Spinner? – sushildlh

Antwort

1

In Ihrer Antwort:

private void initSpinnerType(){ 
    RetrofitInterface api = RetrofitClient.getClient().create(RetrofitInterface.class); 
    Call<LeaveTypeResponse> call = api.getDataPermit(); 
    call.enqueue(new Callback<LeaveTypeResponse>() { 
     @Override 
     public void onResponse(Call<LeaveTypeResponse> call, Response<LeaveTypeResponse> response) { 
      if (response.isSuccessful()) { 
       List<LeaveType> leaveTypeItems = response.body().getResult(); 
       for (int i = 0; i < leaveTypeItems.size(); i++){ 
        String Code = leaveTypeItems.get(i).getCode(); // I want to show this when Selected 
        String leaveType = leaveTypeItems.get(i).getType(); 
        listSpinner.add(leaveType); 
        // Add your code into an separate ArrayList 
        listCode.add(code); 
       } 
       listSpinner.add(0, "- SELECT TYPE -"); 

       adapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, listSpinner); 
       adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       leaveType.setAdapter(adapter); 

      } else { 
       Toast.makeText(context, "FAILED", Toast.LENGTH_SHORT).show(); 
      } 
     } 
     @Override 
     public void onFailure(Call<LeaveTypeResponse> call, Throwable t) { 
      t.printStackTrace(); 
      Toast.makeText(context, "CAN'T CONNECT", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

Ihre Zuhörer:

leaveType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     // position -1 because in listspinner we add an extra String at 0 index 
     String selectedCode=listCode.get(--position); 
     String selected = parent.getItemAtPosition(position).toString(); 
     Toast.makeText(context, "Choose " + selectedCode, Toast.LENGTH_SHORT).show(); 
    } 
    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 
    } 
}); 
+0

Hallo, Danke für die Antwort, es funktioniert.Aber das Standarddrehfeld ist ** ("- SELECT TYPE -") ** wenn die Aktivität zuerst automatisch geöffnet wird ** ("- SELECT TYPE -") ** wenn 'Toast' mit dem Inhalt von" 100 "ausgegeben wird, sollte es geöffnet werden zum Zeitpunkt von Index auf 1, aber wenn der Index auf 0 'Toast' offen ist, ist das Problem in 'String selectedCode = listCode.get (- position); ' – Aldan

+0

Setzen Sie eine Bedingung, wenn die Position 0 ist, dann zeigen Sie nicht Toast. – ved

+0

Ja es ist wahr, aber der 'Code' ist direkt an ** 101 **, siehe oben mein' JSON POJO'. so der 'Code' ** 100 ** in Pass – Aldan

1

eine Klasse erstellen, die sowohl Code und leavetype speichert und fügen sie ihn in listSpinner Liste

class Data{ 
    String code; 
    String leaveType; 
    public Data(String code,String leaveType){ 
     this.code=code; 
this.leavetype=leavetype; 
} 

public String getCode(){ 
return code; 
} 

make Änderung in initSpinnerType(), wie unten

ArrayList<String> codeList=new ArrayList<String>(); 


ArrayList<String> leaveList=new ArrayList<String>(); 

private void initSpinnerType(){ 
     RetrofitInterface api = RetrofitClient.getClient().create(RetrofitInterface.class); 
     Call<LeaveTypeResponse> call = api.getDataPermit(); 
     call.enqueue(new Callback<LeaveTypeResponse>() { 
      @Override 
      public void onResponse(Call<LeaveTypeResponse> call, Response<LeaveTypeResponse> response) { 
       if (response.isSuccessful()) { 
        List<LeaveType> leaveTypeItems = response.body().getResult(); 
codeList.clear(); 
leaveList.clear(); 
        for (int i = 0; i < leaveTypeItems.size(); i++){ 

        codeList.add(leaveTypeItems.get(i).getCode()); 
leaveList.add(leaveTypeItems.get(i).getType()); 
         listSpinner.add(leaveList); 
        } 
        listSpinner.add(0, "- SELECT TYPE -"); 

        adapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, listSpinner); 
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
        leaveType.setAdapter(adapter); 

       } else { 
        Toast.makeText(context, "FAILED", Toast.LENGTH_SHORT).show(); 
       } 
      } 
      @Override 
      public void onFailure(Call<LeaveTypeResponse> call, Throwable t) { 
       t.printStackTrace(); 
       Toast.makeText(context, "CAN'T CONNECT", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 

jetzt Zugangscode thik dies:

leaveType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     String selected = parent.getItemAtPosition(position); 
String code=codeList.get(position); 
     Toast.makeText(context, "Choose " + code, Toast.LENGTH_SHORT).show(); 
    } 
    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 
    } 
}); 
+0

Es funktioniert nicht für mich – Aldan

+0

kann ich den Fehler bekommen, dass Sie mit diesem Code bekommen –

+0

haben es einige Änderungen machen bitte tun Sie das gleiche und es wird sicherlich funktionieren –