TL; DR
Nouveau pour rénover il est donc probablement une erreur noob. Endpoint fonctionne bien dans le facteur et je reçois Response{protocol=http/1.1, code=200, message=OK, url=http://192.168.1.249/api/v1/user/1}
dans la réponse, mais aucune donnée liée à l'utilisateur.Rénovation 2 - Obtenir 200 réponse mais pas obtenir les données renvoyées
Le problème
J'ai construit une API REST en utilisant Laravel que je veux accéder à des périphériques. Il y aura beaucoup de points de terminaison qui doivent être accédés mais je ne peux pas obtenir n'importe lequel d'entre eux pour fonctionner. J'essaie d'en faire un avant d'ajouter le reste, mais même si je reçois un 200 je ne reçois aucune donnée.
Toutes les propriétés sont présentes sur le corps de la réponse, mais elles sont toutes nulles.
Le code
MainActivity.java
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.x.tools.actualrest.rest.User;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.ArrayList;
import java.util.List;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class MainActivity extends Activity {
private CdenApi cdenAPI;
private String token;
String requested_with = "XMLHttpRequest";
String content_type = "application/json";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
createCdenAPI();
cdenAPI.getUser(requested_with, content_type, "1").enqueue(userCallback);
}
@Override
protected void onResume() {
super.onResume();
}
private void createCdenAPI() {
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd HH:mm:ss")
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(CdenApi.BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
cdenAPI = retrofit.create(CdenApi.class);
}
Callback<User> userCallback = new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
if (response.isSuccessful()) {
User data = new User();
data = response.body();
} else {
}
}
@Override
public void onFailure(Call<User> call, Throwable t) {
t.printStackTrace();
}
};
}
CdenApi.java
import com.x.tools.actualrest.rest.User;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Path;
import retrofit2.Call;
public interface CdenApi {
String BASE_URL = "http://192.168.1.249/api/v1/";
@GET("user/{id}")
Call<User> getUser(@Header("X-Requested-With") String req_with, @Header("Content-Type") String cont_type, @Path("id")String userId);
}
User.java
import com.google.gson.annotations.SerializedName;
public class User {
@SerializedName("id")
public Integer id;
@SerializedName("name")
public String name;
@SerializedName("email")
public String email;
@SerializedName("access_level")
public Integer accessLevel;
@SerializedName("created_at")
public String createdAt;
@SerializedName("updated_at")
public String updatedAt;
@SerializedName("view_boxes")
public ViewBoxes viewBoxes;
}
UserResult.java
import com.google.gson.annotations.SerializedName;
public class UserResult {
@SerializedName("msg")
public String msg;
@SerializedName("user")
public User user;
}
ViewBoxes.java
import com.google.gson.annotations.SerializedName;
public class ViewBoxes {
@SerializedName("href")
public String href;
@SerializedName("method")
public String method;
}
JSON de point final:
{
"msg": "User information",
"user": {
"id": 1,
"name": "Guy",
"email": "[email protected]",
"access_level": 1,
"created_at": "2017-08-22 15:53:06",
"updated_at": "2017-08-22 15:53:06",
"view_boxes": {
"href": "api/v1/user/1",
"method": "GET"
}
}
}
La solution
J'ai besoin de savoir où je vais faux. Je suis novice en matière de modernisation, et je suis certain que j'ai mis en œuvre quelque chose de mal, mais je ne vois pas le problème.
Merci d'avance pour toute aide.
Le rappel de l'utilisateur beign est-il appelé? avez-vous une erreur dans la trace de la pile? avez-vous la permission d'Internet dans votre manifeste? –
Il est appelé, et non je ne reçois aucune erreur – mtrueblood
Vous pourriez mettre un "point d'arrêt" (https://developer.android.com/studio/debug/index.html#breakPoints) pour voir ce qui se passe ou vous peut imprimer un journal, vérifiez qu'il ne va pas à la condition else qui est vide. –