2017-06-05 7 views
0

Ich bin neu in Android. Ich brauche eine Liste von Strings aus einer JSON-Liste. Es wird zu einer Spinner Liste hinzugefügt. Ich habe die Liste auf dem Server wieSo erhalten Sie die Liste <String> aus der JSON-Liste mit Retrofit 2?

[{"bgroup":"A+"},{"bgroup":"A1+"},{"bgroup":"A1-"}]. 

mit Retrofit Scalars versucht. Antwort als

[{"bgroup":"A+"},{"bgroup":"A1+"},{"bgroup":"A1-"}] 

aber Fehlererfassungs als:

einen String Erwartet wurde aber BEGIN_OBJECT in Zeile 1 Spalte 3 Pfad $ [0] *

einen besseren Weg, die zum Abrufen Liste der Strings aus dem JSON?

+0

Es Sie klar sagt, dass Es kann keine Zeichenfolge lesen, von der ein Objekt stammt. Warum nicht einfach ein Mapping erstellen, um 'List ' zu haben und später einen String direkt aus 'Mapping.bgroup' zu extrahieren? –

+0

Wenn Sie denselben String für ein benutzerdefiniertes Datenobjekt verwendet haben, erhalten Sie nach dem Nachrüsten automatisch ein formatiertes Datenobjekt mit Werten. Also benutze den gleichen Schlüssel. und verwenden Sie die Abhängigkeit kompilieren 'com.squareup.retrofit2: converter-gson: 2.0.2' –

+0

@LyubomyrShaydariv Danke für die Antwort. Können Sie für dieses Szenario ein einfaches Beispiel für die Liste angeben? –

Antwort

0

Dies ist ein Beispielcode:

GroupService groupService = createService(GroupService.class); 

Call<List<Groups>> groupCall = groupService.getGroups(); 

    groupCall.enqueue(new Callback<List<Groups>>() { 
      @Override 
      public void onResponse(retrofit.Response<List<Groups>> response, Retrofit retrofit) { 


      } 

      @Override 
      public void onFailure(Throwable t) { 
       t.printStackTrace(); 

      } 
     }); 

Schnittstellen:

public interface GroupService { 

@GET("<URL>") 
Call<List<Groups>> getGroups(); 
} 

Auch Modellnamen Gruppen erstellen.

Ich hoffe, das hilft Ihnen.

0

Nehmen Sie die folgenden Modellklasse (Parcel)

package com.example; 

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Example implements Parcelable { 

@SerializedName("bgroup") 
@Expose 
private String bgroup; 

public String getBgroup() { 
return bgroup; 
} 

public void setBgroup(String bgroup) { 
this.bgroup = bgroup; 
} 


    protected Example(Parcel in) { 
     bgroup = in.readString(); 
    } 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeString(bgroup); 
    } 

    @SuppressWarnings("unused") 
    public static final Parcelable.Creator<Example> CREATOR = new Parcelable.Creator<Example>() { 
     @Override 
     public Example createFromParcel(Parcel in) { 
      return new Example(in); 
     } 

     @Override 
     public Example[] newArray(int size) { 
      return new Example[size]; 
     } 
    }; 
} 

als Interface-Klasse wie diese

public interface ApiService { 

@GET("<URL>") 
Call<List<Example>> getBloodGroups(); 
} 

Und schließlich Retrofit wie folgt nennen erstellen:

Call<List<Example>> call = new RestClient(this).getApiService() 
       .getBloodGroups(); 
     call.enqueue(new Callback<List<Example>>() { 
      @Override 
      public void onResponse(Call<List<Example>> call, Response<List<Example>> response) { 

      } 

      @Override 
      public void onFailure(Call<List<Example>> call, Throwable throwable) { 

      } 
     }); 
+0

Ja. Ihre Antwort sollte funktionieren. Aber ich würde gerne ohne Model-Klasse verwenden. Irgendein anderer einfacher Weg pls? –

+0

Sie möchten also Antwort als JSON String erhalten ?? –

+0

Ich möchte Antwortwerte zu Liste hinzufügen , dann kann ich Dropdown-Menü Spinner verwenden. Endlich habe ich einfache Modellklasse erstellt. Es funktioniert jetzt. Danke @Krishna Meena –

Verwandte Themen