Java 如何在改造中处理以下JSON?给出了无效的双精度错误?
错误:com.google.gson.JsonSyntaxException:java.lang.NumberFormatException:Invalid double:“58403fa09251417f7400b62a” 下面是我解析的代码:Java 如何在改造中处理以下JSON?给出了无效的双精度错误?,java,android,json,retrofit2,gson,Java,Android,Json,Retrofit2,Gson,错误:com.google.gson.JsonSyntaxException:java.lang.NumberFormatException:Invalid double:“58403fa09251417f7400b62a” 下面是我解析的代码: { "id": "297761", "results": [{ "id": "58403fa09251417f7400b62a", "iso_639_1": "en", "iso_3166_1": "US
{
"id": "297761",
"results": [{
"id": "58403fa09251417f7400b62a",
"iso_639_1": "en",
"iso_3166_1": "US",
"key": "CmRih_VtVAs",
"name": "Official Trailer #1",
"site": "YouTube",
"size": 1080,
"type": "Trailer"
}]
}
在Java中,除了“size”属性为整数外,所有数据都以字符串格式存储,使用了序列化数据名的Arraylist
改装方法:-
@SerializedName("id")private String mId;
@SerializedName("iso_639_1")private String mLanguage;
@SerializedName("iso_3166_1")private String mLanguage2;
@SerializedName("key")private String mKey;
@SerializedName("name")private String mName;
@SerializedName("site")private String mSite;
@SerializedName("size")private Integer mSize;
@SerializedName("type")private String mType;
@Override
public void writeToParcel(Parcel parcel, int i)
{
parcel.writeString(mId);
parcel.writeString(mLanguage);
parcel.writeString(mKey);
parcel.writeString(mName);
parcel.writeString(mSite);
parcel.writeInt(mSize);
parcel.writeString(mType);
}
private ArrayList getTrailers(字符串id){
APIs接口apiService=
ApiClient.getClient().create(apinterface.class);
Call=null;
call=apiService.getMovieTrailers(id,BuildConfig.THE_MOVIE\u DB\u API\u键);
call.enqueue(新回调(){
@凌驾
public void onResponse(调用调用,响应响应){
movieTrailers=(ArrayList)response.body().getTrailerResults();
Log.d(标记“联系的服务器:”+call.request().url());
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
//由于请求失败,此处记录错误
Log.d(标记“联系的服务器:”+call.request().url());
Log.e(TAG,t.toString());
}
});
回归电影人;
}
因为改型为URL返回了整个JSON结果
我使用serializable遍历所有值:
private ArrayList<MovieTrailer> getTrailers(String id) {
ApiInterface apiService =
ApiClient.getClient().create(ApiInterface.class);
Call<MovieResponse> call = null;
call = apiService.getMovieTrailers(id,BuildConfig.THE_MOVIE_DB_API_KEY);
call.enqueue(new Callback<MovieResponse>() {
@Override
public void onResponse(Call<MovieResponse> call, Response<MovieResponse> response) {
movieTrailers = (ArrayList<MovieTrailer>) response.body().getTrailerResults();
Log.d(TAG, "server contacted at: " + call.request().url());
}
@Override
public void onFailure(Call<MovieResponse> call, Throwable t) {
// Log error here since request failed
Log.d(TAG, "server contacted at: " + call.request().url());
Log.e(TAG, t.toString());
}
});
return movieTrailers;
}
张贴您试图解析/使用它的代码。很明显,该值不是对应于mId的双精度值?那么,请检查您是否正在解析正确的“id”,因为有两个称为“id”的索引,它们是不同的对象。先生,您能描述一下吗?您应该解释一下您的操作。发布整个工作流、整个方法(实例调用、进行调用、解析器等)。是否有一点您试图将“id”索引解析为double?
@SerializedName("id")
private int id;
@SerializedName("results")
private List<MovieTrailerResults> movieTrailerResults;
@SerializedName("id")private String mId;
@SerializedName("iso_639_1")private String mLanguage;
@SerializedName("iso_3166_1")private String mLanguage2;
@SerializedName("key")private String mKey;
@SerializedName("name")private String mName;
@SerializedName("site")private String mSite;
@SerializedName("size")private Integer mSize;
@SerializedName("type")private String mType;