我正在尝试使用Retrofit库,因此我可以从我的Android应用程序调用我创建的Django REST API。我写了以下代码:
UserAPI.java
public interface UserAPI {
String BASE_URL = "http://www.example.com";
@GET("/json.json")
Call<JsonObject> getUsers();
class Factory {
private static UserAPI service;
public static UserAPI getInstance(){
if(service == null){
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(BASE_URL)
.build();
service = retrofit.create(UserAPI.class);
return service;
}
else{
return service;
}
}
}
}
JsonObject.java (这是从JSON到Pojo生成的)
public class JsonObject {
@SerializedName("username")
@Expose
private String username;
@SerializedName("password")
@Expose
private String password;
@SerializedName("email")
@Expose
private String email;
/**
*
* @return
* The username
*/
public String getUsername() {
return username;
}
/**
*
* @param username
* The username
*/
public void setUsername(String username) {
this.username = username;
}
/**
*
* @return
* The password
*/
public String getPassword() {
return password;
}
/**
*
* @param password
* The password
*/
public void setPassword(String password) {
this.password = password;
}
/**
*
* @return
* The email
*/
public String getEmail() {
return email;
}
/**
*
* @param email
* The email
*/
public void setEmail(String email) {
this.email = email;
}
}
现在,这是我的代码实际失败的地方: MainActivity.java
UserAPI.Factory.getInstance().getUsers().enqueue(new Callback<JsonObject>() {
@Override
public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
Log.wtf("Response", "" + response.body());
}
@Override
public void onFailure(Call<JsonObject> call, Throwable t) {
Log.wtf("FAIL", "This failed...");
}
});
我无法想到为什么会发生这种情况。
作为参考,这是JSON文件在Web浏览器上导航时所看到的内容:
[{"username":"testuser","password":"pbkdf2_sha256$24000$9YMUYsV7WuIa$FnokGg8jFlAq3LHGBXgqVHNUnLCQa7pj5ehhWKvNkuU=","email":""}]
我为大量的文字道歉,但我不知道如何解释我的问题。任何帮助将不胜感激。感谢
答案 0 :(得分:0)
尝试将您的JsonObject.java
课程重命名为其他内容。
修改强>
更改您的界面
@GET("/json.json")
Call<JsonObject> getUsers();
到
@GET("/json.json")
Call<JSONArray> getUsers();
检查,如果有效,如果有效,则将JSONArray转换为JsonObject
在你的api通话的onResponse
方法中
Log.wtf("Response", "" + response.body().getJSONObject(0));
答案 1 :(得分:0)
因为您正在接收一组用户(即使它看起来只返回一个元素),您应该相应地更改您的界面:
@GET("/json.json")
Call<List<JsonObject>> getUsers();
所以你的enqueue()
代码:
UserAPI.Factory.getInstance().getUsers().enqueue(new Callback<List<JsonObject>>() {
@Override
public void onResponse(Call<List<JsonObject>> call, Response<List<JsonObject>> response) {
for (JsonObject user : response.body()) {
Log.wtf("Response", "" + user.getUsername());
}
}
@Override
public void onFailure(Call<List<JsonObject>> call, Throwable t) {
Log.wtf("FAIL", "This failed...");
}
});
我会将POJO JsonObject
重命名为User
或其他有意义的内容。