Impossible de créer le convertisseur de ma classe en Android de Rénovation de la bibliothèque
Im migration à partir de l'aide de Volley à Rénover, j'ai déjà gson classe que j'ai utilisé avant pour la conversion de JSONObject reponse à un objet qui implémente gson annotations. Quand je suis en train de faire des requête http get à l'aide de rénovation, mais ensuite, mon application se bloque avec ce message d'erreur :
Unable to start activity ComponentInfo{com.lightbulb.pawesome/com.example.sample.retrofit.SampleActivity}: java.lang.IllegalArgumentException: Unable to create converter for class com.lightbulb.pawesome.model.Pet
for method GitHubService.getResponse
Im suivant le guide dans rénovation site et je viens avec ces implémentations :
C'est mon activité où je suis en train d'exécuter le rétro de la requête http:
public class SampleActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sample);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("**sample base url here**")
.build();
GitHubService service = retrofit.create(GitHubService.class);
Call<Pet> callPet = service.getResponse("41", "40");
callPet.enqueue(new Callback<Pet>() {
@Override
public void onResponse(Response<Pet> response) {
Log.i("Response", response.toString());
}
@Override
public void onFailure(Throwable t) {
Log.i("Failure", t.toString());
}
});
try{
callPet.execute();
} catch (IOException e){
e.printStackTrace();
}
}
}
Mon interface qui s'est avéré être mon API
public interface GitHubService {
@GET("/**sample here** /{petId}/{otherPet}")
Call<Pet> getResponse(@Path("petId") String userId, @Path("otherPet") String otherPet);
}
Et enfin l'Animal de compagnie de classe qui devrait être la reponse:
public class Pet implements Parcelable {
public static final String ACTIVE = "1";
public static final String NOT_ACTIVE = "0";
@SerializedName("is_active")
@Expose
private String isActive;
@SerializedName("pet_id")
@Expose
private String petId;
@Expose
private String name;
@Expose
private String gender;
@Expose
private String age;
@Expose
private String breed;
@SerializedName("profile_picture")
@Expose
private String profilePicture;
@SerializedName("confirmation_status")
@Expose
private String confirmationStatus;
/**
*
* @return
* The confirmationStatus
*/
public String getConfirmationStatus() {
return confirmationStatus;
}
/**
*
* @param confirmationStatus
* The confirmation_status
*/
public void setConfirmationStatus(String confirmationStatus) {
this.confirmationStatus = confirmationStatus;
}
/**
*
* @return
* The isActive
*/
public String getIsActive() {
return isActive;
}
/**
*
* @param isActive
* The is_active
*/
public void setIsActive(String isActive) {
this.isActive = isActive;
}
/**
*
* @return
* The petId
*/
public String getPetId() {
return petId;
}
/**
*
* @param petId
* The pet_id
*/
public void setPetId(String petId) {
this.petId = petId;
}
/**
*
* @return
* The name
*/
public String getName() {
return name;
}
/**
*
* @param name
* The name
*/
public void setName(String name) {
this.name = name;
}
/**
*
* @return
* The gender
*/
public String getGender() {
return gender;
}
/**
*
* @param gender
* The gender
*/
public void setGender(String gender) {
this.gender = gender;
}
/**
*
* @return
* The age
*/
public String getAge() {
return age;
}
/**
*
* @param age
* The age
*/
public void setAge(String age) {
this.age = age;
}
/**
*
* @return
* The breed
*/
public String getBreed() {
return breed;
}
/**
*
* @param breed
* The breed
*/
public void setBreed(String breed) {
this.breed = breed;
}
/**
*
* @return
* The profilePicture
*/
public String getProfilePicture() {
return profilePicture;
}
/**
*
* @param profilePicture
* The profile_picture
*/
public void setProfilePicture(String profilePicture) {
this.profilePicture = profilePicture;
}
protected Pet(Parcel in) {
isActive = in.readString();
petId = in.readString();
name = in.readString();
gender = in.readString();
age = in.readString();
breed = in.readString();
profilePicture = in.readString();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(isActive);
dest.writeString(petId);
dest.writeString(name);
dest.writeString(gender);
dest.writeString(age);
dest.writeString(breed);
dest.writeString(profilePicture);
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<Pet> CREATOR = new Parcelable.Creator<Pet>() {
@Override
public Pet createFromParcel(Parcel in) {
return new Pet(in);
}
@Override
public Pet[] newArray(int size) {
return new Pet[size];
}
};
}
- s'il vous plaît ajouter la Chaîne de réponse de ce lien mysample.com/development/cuteness
- c'est juste un exemple, d'ailleurs j'ai changé mon post déjà
- à la ligne à laquelle vous obtenez l'erreur ....
- vous devez passer par youtube.com/watch?v=gGuUBlzmtPQ cette vidéo
- ohh c'est l'ancien. essayez de visiter modernisation carré.github.io/renovation
Vous devez vous connecter pour publier un commentaire.
Avant
2.0.0
, la valeur par défaut converter est un gson convertisseur, mais dans2.0.0
et, plus tard, la valeur par défaut du convertisseur estResponseBody
. À partir de la documentation:Dans
2.0.0+
, vous devez explicitement spécifier que vous voulez un Gson converter:Vous devrez également ajouter la dépendance suivant à votre gradle fichier:
Utiliser la même version pour le convertisseur comme vous le faites pour votre rénovation. Le ci-dessus correspond à la rénovation de la dépendance:
Il est également à noter que la rédaction de ce, la rénovation docs ne sont pas complètement mis à jour, c'est pourquoi de cet exemple, vous avez des ennuis. À partir de la documentation:
Si jamais quelqu'un tombe sur ce sujet dans l'avenir parce que vous essayez de définir votre propre convertisseur usine et recevez cette erreur, il peut aussi être causé par le fait d'avoir plusieurs variables dans une classe avec la même sérialisé nom. C'est à dire:
Avoir sérialisé noms définis par deux fois (probablement par erreur) sera également de se débarrasser de cette erreur exactement la même.
Mise à jour: Gardez à l'esprit que cette logique est vrai aussi via l'héritage. Si vous étendre à une classe parent avec un objet qui a le même Sérialisé nom que vous faites dans la sous-classe, il sera la cause de ce même problème.
Basé sur top commentaire que j'ai mis à jour mon importations
J'ai utilisé http://www.jsonschema2pojo.org/ afin de créer des pojo de Spotify résultats json et assurez-vous de spécifier Gson format.
Ces jours, il ya Android Studio plugins qui peut créer de la pojo ou de Kotlin des modèles de données pour vous. Une excellente option pour mac est Quicktype.
https://itunes.apple.com/us/app/paste-json-as-code-quicktype/id1330801220
Dans mon cas, j'ai eu un TextView objet à l'intérieur de ma classe modale et GSON ne sais pas comment sérialiser. Le marquant comme transitoire a résolu le problème.
@Silmarilos du post m'a aidé à résoudre ce problème. Dans mon cas, c'est que j'ai utilisé "id" sérialisé nom, comme ceci:
et je l'ai changé pour
Tous aujourd'hui. J'ai oublié que les " id " est l'attribut par défaut.
Cela peut aider quelqu'un
Dans mon cas, par erreur, j'ai écrit SerializedName comme ce
Il devrait être
Hey, j'ai été en passant par la même question aujourd'hui m'a fallu une journée entière pour trouver une solution mais c'est la solution que j'ai trouvé enfin.
Am à l'aide de Poignard dans mon code et j'ai besoin de mettre en œuvre la Gson convertisseur dans mon rénovation de l'instance.
c'était donc mon code avant de
c'est ce que j'ai fini avec
avis qu'il n'existe pas de convertisseur dans le premier exemple et le plus, si vous n'avez pas instancié Gson vous ajouter comme ce
et vous assurer que vous avez inclus dans l'appel de méthode pour la mise aux normes.
encore une fois, espérons que cela aide quelqu'un comme moi.