1
votes

La modernisation a réussi à renvoyer les données via Wi-Fi mais échoue sur les données mobiles

J'utilise la mise à niveau pour obtenir des données d'un service Web. La mise à niveau donne une réponse réussie via Wifi, mais chaque fois que j'utilise les données mobiles, la mise à niveau donne une réponse en cas d'échec.

Classe Api

public class Response {

@SerializedName("id")
@Expose
private Integer id;
@SerializedName("type")
@Expose
private Integer type;
@SerializedName("videourl")
@Expose
private String videourl;
@SerializedName("ImageURL")
@Expose
private String imageURL;
@SerializedName("Description")
@Expose
private String description;
@SerializedName("isactive")
@Expose
private Boolean isactive;

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public Integer getType() {
    return type;
}

public void setType(Integer type) {
    this.type = type;
}

public String getVideourl() {
    return videourl;
}

public void setVideourl(String videourl) {
    this.videourl = videourl;
}

public String getImageURL() {
    return imageURL;
}

public void setImageURL(String imageURL) {
    this.imageURL = imageURL;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public Boolean getIsactive() {
    return isactive;
}

public void setIsactive(Boolean isactive) {
    this.isactive = isactive;
}

}}

Classe d'interface RestApis

XXX

Classe MainActivity

public class AlertsPOJO {

@SerializedName("successcode")
@Expose
private Integer successcode;
@SerializedName("message")
@Expose
private String message;
@SerializedName("response")
@Expose
private Response response;

public Integer getSuccesscode() {
    return successcode;
}

public void setSuccesscode(Integer successcode) {
    this.successcode = successcode;
}

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

public Response getResponse() {
    return response;
}

public void setResponse(Response response) {
    this.response = response;
}

Classe AlertPOJO

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    RestApis apiService =
            Api.getClient().create(RestApis.class);

    Call<AlertsPOJO> call = apiService.getAlert();
    call.enqueue(new Callback<AlertsPOJO>() {
        @Override
        public void onResponse(Call<AlertsPOJO>call, Response<AlertsPOJO> response) {

            if (response.isSuccessful()){
                AlertsPOJO.Response response1 = response.body().getResponse();
                Toast.makeText(MainActivity.this, "Success " + response1.getId(), Toast.LENGTH_SHORT).show();

            }
            else {
                Toast.makeText(MainActivity.this, "Error " + response.errorBody(), Toast.LENGTH_SHORT).show();

            }

        }

        @Override
        public void onFailure(Call<AlertsPOJO>call, Throwable t) {
            // Log error here since request failed
            Toast.makeText(MainActivity.this, "Failed", Toast.LENGTH_SHORT).show();

        }
    });
}

}

Réponse

XXX

Quelqu'un peut-il me dire pourquoi l'API fonctionne avec succès via le wifi et échoue sur les données mobiles.


13 commentaires

publiez vos deux journaux


@OmInfowaveDevelopers D / Message d'erreur: Impossible de résoudre l'hôte "www.jivansath.com": aucune adresse associée au nom d'hôte


Je pense que c'est le problème avec les données mobiles, pas avec Retrofit


vérifiez que cette ligne est dans votre manifeste: -


La permission @SejpalPavan est déjà là


définir le délai d'expiration dans le constructeur de rénovation si la connexion n'était pas correcte, l'appel de l'API s'arrêtera


Gson gson = nouveau GsonBuilder () .setLenient () .create (); OkHttpClient okHttpClient = new OkHttpClient.Builder () .readTimeout (60, TimeUnit.SECONDS) .connectTimeout (60, TimeUnit.SECONDS) .build (); retrofit = new Retrofit.Builder () .baseUrl (base_URL) .client (okHttpClient) .addCallAdapterFactory (RxJavaCallAdapterFactory.create ()) .addConverterFactory (GsonConverterFactory.create (gson)) .build ();


@SejpalPavan même erreur


essayez de vérifier le protocole apn dans le point d'accès de votre carte SIM et changez-le en ipv4, puis vérifiez


Je ne pense pas que cela puisse être une bonne pratique.


@Wasif quel appareil vous utilisez? actuellement quel système d'exploitation fonctionne sur l'appareil?


J'utilise Samsung S8 avec Android 9.1


@Wasif Cochez cette réponse stackoverflow.com/a/53739479/2941375


4 Réponses :


2
votes

Vous n'avez probablement pas l'autorisation INTERNET. Ajoutez ceci au fichier manifeste

<uses-permission android:name="android.permission.INTERNET" />


0 commentaires

0
votes

Configurez le client OkHttp avec votre code de mise à niveau. Suivez l'étape ci-dessous.

public static Retrofit getClient() {
    if (retrofit==null) {
        retrofit = new Retrofit.Builder()
                .client(okHttpClient)
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    return retrofit;
}

Ensuite, appelez ce code dans la mise à niveau où vous créez votre URL.

final OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .connectTimeout(20, TimeUnit.SECONDS)
    .writeTimeout(20, TimeUnit.SECONDS)
    .readTimeout(30, TimeUnit.SECONDS)
    .build();

Ajoutez le délai de connexion à max. Cela peut être un problème de faible connectivité sur le téléphone mobile.


10 commentaires

Pas de progrès. J'utilise 4g mais toujours la même erreur de Impossible de résoudre l'hôte "www.jivansath.com": Aucune adresse associée au nom d'hôte


@Wasif Sont-ils des services Web ASP.NET


Oui, ce sont des services ASP.NET


@Wasif Essayez d'abord de courir sur POSTMAN, puis partagez ici


{"successcode": 202, "message": "", "response": {"id": 1, "type": 5, ‌ "videourl": "Uploads / ‌ Videos / apps / add1.mp4‌ "," ImageURL ":" "," Des‌ cription ":" Hy News alert "," isactive ": true}}


Ensuite, en fonction du problème de service Web, HTTP 202 est accepté. La demande a été acceptée pour traitement, mais le traitement n'est pas terminé. La demande peut éventuellement être traitée ou non, car elle peut être refusée lorsque le traitement a effectivement lieu. Il n'y a pas de fonction HTTP pour renvoyer un code d'état à partir d'une opération asynchrone.


Alors, quelle peut être la solution à ce problème?


Il devrait être HTTP 200 OK pour l'analyse.


@Wasif demande au développeur de changer de service Web et de le tester sur POSTMAN pour une réponse HTTP 200 OK


@Wasif Parse alors.



0
votes

Comme il s'agit d'un problème HTTP 202 vs 200 sur le traitement côté serveur, essayez d'appliquer ceci: une autre réponse sur un autre fil


0 commentaires

1
votes

Ajouter le fichier de configuration réseau au dossier res

 network-file-in-res folder

network-security-config:

android:networkSecurityConfig="@xml/network_security_config"

et ajoutez une ligne dans la balise d'application du fichier manifeste

<network-security-config>
<domain-config cleartextTrafficPermitted="true">
    <domain includeSubdomains="true">your domain here</domain>
</domain-config>
<base-config cleartextTrafficPermitted="true">
    <trust-anchors>
        <certificates src="system" />
    </trust-anchors>
</base-config></network-security-config>


0 commentaires