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.
4 Réponses :
Vous n'avez probablement pas l'autorisation INTERNET. Ajoutez ceci au fichier manifeste
<uses-permission android:name="android.permission.INTERNET" />
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.
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.
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
Ajouter le fichier de configuration réseau au dossier res
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>
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