java - 无法使用 Rest API 数据填充 pojo

标签 java android json retrofit android-bootstrap

我正在为我的项目使用此链接中的 android-bootsrap
https://github.com/AndroidBootstrap/android-bootstrap

我保留了项目结构,不执行身份验证。在我的应用程序中,我正在调用 REST API,该 API 以 Json 格式返回数据。使用 Retrofit,我们调用服务并获取 Json 格式的数据。

我们为 Json API 创建了一个 POJO 类。但在我的应用程序中,我们无法获取填充有 Rest API 数据的 Pojo 对象。

我的代码如下: User.java

public class User implements Serializable {
 private String shortDescription;
 private String name;

 public String getShortDescription() { return shortDescription;}
 public void setShortDescription(String shortDescription) {
    this.shortDescription = shortDescription;
 }

 public String getName() { return name; }
 public void setName(String name) { this.name = name; }
}

UserService.java

 public interface UserService {
   @GET("/search/items")
   UsersWrapper getUsers();
 }

UserWrapper.java

public class UsersWrapper {
 private User results;
 public User getResults() { return results; }
}

MainActivity.class

public class MainActivity extends BaseActivity {
 String data = "";
 private User user;
 @Inject protected BootstrapServiceProvider serviceProvider;

 @Override
 protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    new MyTask().execute();
 }

// making async request 
 class MyTask extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... urls) {
        try {
            user = serviceProvider.getService().getUsers();   
            user.getShortDescription();   // here i am getting NullPointerException
        } catch (IOException e) {
            e.printStackTrace();
        }
        return data;
    }
}

我正在改造日志中获取数据,但是当我尝试通过 User 对象获取数据时,我收到 NullPointerException。

我的Json数据如下:

{"name":"user1","short_description":"user1 是研究生"}

最佳答案

因此,您的 User/UserWrapper 类设置 GSON 的方式期待一个如下所示的 JSON 结果:

{
  "results": {
    "name": "user1",
    "short_description": "user1 is a postgraduate student"
  }
}

如果 JSON 结果只是上面示例中“结果” block 内的内容,您可能希望完全放弃 UserWrapper,并将您的服务接口(interface)更改为如下所示:

public interface UserService {
   @GET("/search/items")
   User getUsers();
}

如果 JSON 结果是用户数组,例如

[
  {
    "name": "user1",
    "short_description": "user1 is a postgraduate student"
  },
  ...
]

然后你会希望你的界面看起来像:

public interface UserService {
   @GET("/search/items")
   List<User> getUsers();
}

关于java - 无法使用 Rest API 数据填充 pojo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25811875/

相关文章:

java - 聊天服务器写入关闭的套接字

Android onClick 方法不适用于自定义 View

android - android surface流媒体视频

android - 在android中的 Canvas 上旋转图像

jQuery 从页面加载数据中设置选定选项

python - 如何高效地预处理和解析JSON数据?

java - 为什么这个 if 语句中要运行 else 呢?

java - Java11中的谓词过滤所有元素

java - 通过对数据库所做的更改动态刷新ListView android

java - @ResponseBody,不尊重对象的构造函数