我正在使用 Retrofit2 从我的 android 应用程序对我的服务器进行 GET 调用,它返回一个 Null 对象作为响应,而当我通过 Postman 进行相同的 GET 调用时,它会根据需要返回一个有效对象。
我有一个如下接口,其中findFriends((是我的节点.js服务器中的一个函数
public interface RetrofitInterface
{
//for searching for friends
@GET("find_friends/{email}")
Call<User> findFriends(@Path("email") String email);
}
我的对象类如下
public class User
{
private String name;
private String email;
private String city;
private int age;
private String password;
private String created_at;
private String newPassword;
private String token;
public void setName(String name) {
this.name = name;
}
public void setEmail(String email) {
this.email = email;
}
public void setCity(String city) {
this.city = city;
}
public void setAge(Integer age) {
this.age = age;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
public String getCity()
{
return city;
}
public Integer getAge() {
return age;
}
public String getCreated_at() {
return created_at;
}
public void setNewPassword(String newPassword) {
this.newPassword = newPassword;
}
public void setToken(String token) {
this.token = token;
}
}
我使用该接口的调用函数如下
public void searchFunction(View view)
{
fMail= searchTxtView.getText().toString();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
RetrofitInterface retrofitInterface = retrofit.create(RetrofitInterface.class);
Call<User> call = retrofitInterface.findFriends(fMail);
call.enqueue(new Callback<User>()
{
@Override
public void onResponse(Call<User> call, retrofit2.Response<User> response)
{
if (response.isSuccessful())
{
User responseBody = response.body();
//data = new ArrayList<>(Arrays.asList(responseBody.getData()));
adapter = new DataAdapterForFriendList(responseBody);
recyclerView.setAdapter(adapter);
Log.d("success", response.toString());
Log.d("success2", responseBody.toString());
}
else
{
ResponseBody errorBody = response.errorBody();
Gson gson = new Gson();
try
{
Log.d("error1", response.toString());;
}
catch (Exception e)
{
e.printStackTrace();
Log.d("error2", e.toString());
}
}
}
@Override
public void onFailure(Call<User> call, Throwable t)
{
Log.d(TAG, "onFailure: "+t.getLocalizedMessage());
}
});
}
我的邮递员回复已提供 我的邮递员回复
调试时在 Android Studio 中作为空对象的响应是 NULL 对象作为响应
我在这里做错了什么?响应成功,但不包含任何内容,而是包含所有 null 值。任何帮助将不胜感激。
你应该以这种方式使用你的模型类,现在你可以得到如下的 API 结果
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
public class User implements Serializable{
@SerializedName("name")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
在这里您可以轻松创建您的 POJO 类链接
为响应制作另一个 pojo 类,因为当您获得响应时,它会给出它匹配的数据键对象,然后以 null 显示所有值。 服务器密钥对于获取 pojo 调用下方使用的数据并传递到 API 接口非常重要....
public class UserResponseModel {
@SerializedName("data")
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
然后在更改 API 方法后,如下所示..
@GET("find_friends/{email}")
Call<UserResponseModel> findFriends(@Path("email") String email);
如果您想从服务器给出的获取朋友列表,请创建一个 pojo 类并通过UserResponseModel
模型类 ba,因为我检查您的邮递员响应,它给出了一个对象和数组。如果您需要朋友列表数组在上面的用户响应模型类中定义以下行...
@SerializedName("friend_list")
private List<Friend> friendList;
public List<Friend> getFriendList() {
return friendList;
}
public void setFriendList(List<Friend> friendList) {
this.friendList = friendList;
}
是的,您创建的"用户"模型是错误的,因为您直接访问字段,该字段是响应主要对象的内部对象。.因此,只需在下面的链接中复制您的响应和害虫并创建一个新的模型类并使用此模型而不是用户模型。
http://www.jsonschema2pojo.org/
你需要在下面创建类pojo
public class DataGet {
int status;
boolean isSuccess;
String message;
User data;
}
和改变
Call<User> call = retrofitInterface.findFriends(fMail);
call.enqueue(new Callback<User>(){
@Override
public void onResponse (Call <User> call, retrofit2.Response <User> response){
//...
}
@Override
public void onFailure (Call <User> call, Throwable t){
//...
}
});
自
Call<DataGet> call = retrofitInterface.findFriends(fMail);
call.enqueue(new Callback<DataGet>(){
@Override
public void onResponse (Call <DataGet> call, retrofit2.Response <DataGet> response){
//...
}
@Override
public void onFailure (Call <DataGet> call, Throwable t){
//...
}
});
<</div>
div class="one_answers"> 检查您的用户是否在另一个对象内。您可以使用,
public class Responce {
private int status;
private User data;
}
这里User
是你的User
模型。 您可以从这里生成 POJO 模型
您的RetrofitInterface
将是
public interface RetrofitInterface
{
//for searching for friends
@GET("find_friends/{email}")
Call<Responce> findFriends(@Path("email") String email);
}