Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 针对特定数据模型返回null的改装请求_Java_Android_Retrofit - Fatal编程技术网

Java 针对特定数据模型返回null的改装请求

Java 针对特定数据模型返回null的改装请求,java,android,retrofit,Java,Android,Retrofit,我正在尝试向发出API请求,该请求应返回以下数据模型: "data": [{ "id": "CiDkx", "title": "Did You Know", [...] } [...] ], "success": true, "status": 200 } 但我不明白如何实现这一目标 到目前为止,我是如何做到这一点的: public interface ImgurAPI { @GE

我正在尝试向发出API请求,该请求应返回以下数据模型:

"data": [{
        "id": "CiDkx",
        "title": "Did You Know",
        [...]                     
    } [...]
    ],
"success": true,
"status": 200
}
但我不明白如何实现这一目标

到目前为止,我是如何做到这一点的:

public interface ImgurAPI {
    @GET("gallery/hot/viral/{page}")
    Call<ImageData> getGallery(@Path("page") String page); 
}

static final String BASE_URL = "https://api.imgur.com/3/";

public void start() {
    Gson gson = new GsonBuilder()
            .setLenient()
            .create();

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build();

    ImgurAPI githubAPI = retrofit.create(ImgurAPI.class);

    Call<ImageData> call = githubAPI.getGallery("0");
    call.enqueue(this);
}

@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onResponse(Call<ImageData> call, Response<ImageData> response) {
    if(response.isSuccessful()) {
        ImageData image = response.body();
    } else {
        System.out.println(response.errorBody());
    }
}
请求确实通过了,但我收到的响应的id和标题为
null


我几乎可以肯定,我还不知道如何组织我的模型(或者我应该说容器?)类,从这个意义上说,我是对的吗?

您已经非常接近这一点,我建议调试或添加一些改进日志来解决它

在没有看到更多信息的情况下,您的ImageData类似乎与您正在使用的JSON不匹配。看看

}

这从一个未命名的对象开始,该对象包含一个名为“data”的数组,并包含每个图像的信息(如ID和title)以及您正在使用的其他对象

ImageData类只是图像数据项中的一个,而不是Reformation和GSON获取并试图解析的集合。您需要一个用于集合的类,或进一步的注释。试试这样的

    public class ImageDataCollection {

       @SerializedName("data")
       private List<ImageData> imageDataList;

       public List<ImageData> getImageDataList() {
          return imageDataList;
       }

       public void setImageDataList(List<ImageData> imageDataList) {
          this.imageDataList = imageDataList;
       }  
    }
公共类ImageDataCollection{
@SerializedName(“数据”)
私有列表imageDataList;
公共列表getImageDataList(){
返回imageDataList;
}
public void setImageDataList(列表imageDataList){
this.imageDataList=imageDataList;
}  
}

然后让您的ImgUr接口处理该集合包装器,而不是单个ImageData对象。(请注意,如果您想检查,也可以将success和status字段等添加到外部集合/包装中,这可能是一个好主意。)

只需转到。将json粘贴到那里并生成文件。您的模型错误。作为响应,您的
ImageData
对象有两个字段
success
status
和array
data
。这正是我所想的,非常感谢您的澄清。
{
"data": [{
    "id": "CiDkx",
    "title": "Did You Know",
    "description": null,
    "datetime": 1487140997,
    "cover": "yZXOBMq",
    ...
}]
    public class ImageDataCollection {

       @SerializedName("data")
       private List<ImageData> imageDataList;

       public List<ImageData> getImageDataList() {
          return imageDataList;
       }

       public void setImageDataList(List<ImageData> imageDataList) {
          this.imageDataList = imageDataList;
       }  
    }