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