J'ai un fichier JSON comme ceci http://sawbo-illinois.org/mobileApp.php. J'ai créé des objets comme:

public class Video {
    public List<all> all;
    public List<String>Language;
    public List<String>Country;
    public List<String>Topic;
    public class all{
        public String id;
        public String Country;
        public String Language;
        public String Topic;
        public String Title;
        public String Video;
        public String Videolight;
        public String Description;
        public String Image;
    }
}

Mais je reçois une réponse d'échec du rappel de Retrofit alors que je suivais comme ça. Où est mon problème?

Mon code complet est:

L'interface Retrofit:

public interface ServiceAPI {

    @GET("mobileApp.php")
    Call<Video> getVideoDetails();
}

Processus de rappel et de conversion possible:

 Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://sawbo-illinois.org/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();

 ServiceAPI service = retrofit.create(ServiceAPI.class);

 final Call<Video> call = service.getVideoDetails();
1
Mahsa 20 avril 2017 à 08:17

3 réponses

Meilleure réponse

Votre code fonctionnerait si la réponse du serveur était un document JSON. La réponse est actuellement un document HTML et cela prête à confusion si vous la visualisez dans un navigateur Web (le même contenu s'applique à la fois au navigateur Web et à la connexion dans une instance OkHttpClient):

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Testing Connection Page</title>
</head>

<body>
{"all":[{"id":"0","Country":"Brazil","Language":"Portuguese","Topic":"HandWashing","Title":"How to Wash Your Hands","Video":"AKA1_Fante_Ghana_HandWashing_Final.3gp","Videolight":"AKA1_Fante_Ghana_HandWashing_Final_Light.3gp","Description":"Washing hands is the best way to prevent the spread of germs and diseases. Dirty hands can carry pathogenic germs that can sicken a person or spread diseases to others. Microorganisms such as bacteria, viruses, parasites, fungi and various chemicals can enter our bodies directly when we touch our face, eyes, nose or mouth or may enter indirectly, when our dirty hands stain surfaces touched by others or where food is prepared. The habit of washing hands with soap and water constitutes the first line of defense against the spread of many diseases, from the common cold or diarrhea to more serious illnesses such as meningitis, influenza or hepatitis as well as many other diseases. This 2-D animation describes the importance of hand washing.","Image":"HandWashing.jpg"},{"id":"1","Country":"Kenya","Language":"Swahili","Topic":"SGComposting3D","Title":"Survival Gardening: How to Create Compost (3D)","Video":"SW_Swahili_Kenya_SGComposting3D_Final.3gp","Videolight":"SW_Swahili_Kenya_SGComposting3D_Final_Light.3gp","Description":"Compost can be used to improve the quality of your soil. You can use plant materials, animal manure and kitchen scraps to create compost. Compost will add nutrients and organic matter to your soil. This animation explains the process of creating and storing compost.","Image":"SGComposting3D.jpg"}],"Language":["Portuguese","Swahili"],"Topic":["HandWashing","SGComposting3D"],"Country":["Brazil","Kenya"]}
</body>
</html>

Vous devez simplement corriger le script mobileApp.php et supprimer tout le contenu qui n'est pas lié à la structure JSON. Ce serait bien si l'en-tête de la réponse Content-Type était défini sur un type JSON MIME: Quel est le type de contenu JSON correct?.

1
Community 23 mai 2017 à 11:54

Je pense que vous devez ajouter barre oblique (/) à la fin de votre baseUrl comme ceci:

Créez votre appel avec une interface comme celle-ci:

public interface ApiWebServices {
    @GET()
    Call<Video> getVideoDetails(@Url String url);
}

Ensuite, effectuez l'appel API comme vous l'avez fait ci-dessus

Call<Video> call = service.getVideoDetails("http://sawbo-illinois.org/mobileApp.php");
call.enque(..);
1
Nir Patel 20 avril 2017 à 06:03
if (response.code() == 200) {        
    String result = response.body().string();
    Gson gson = new Gson();
    pojo = gson.fromJson(result, PojoClass.class);
}
0
Kalamarico 5 oct. 2017 à 13:24