gpt4 book ai didi

android - 当我尝试使用 Gson 从 Json 获取 responseObj 时出现错误。致命异常 : OkHttp Dispatcher NumberFormatException: Invalid double: ""

转载 作者:行者123 更新时间:2023-11-30 01:42:37 24 4
gpt4 key购买 nike

刚开始使用 okhttp 和 Gson。我正在通过创建一个 ListView 来练习,该 ListView 将显示来自 Rotten Tomatoes API 的信息

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ListView;
import com.google.gson.Gson;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;


import java.io.IOException;


public class MainActivity extends AppCompatActivity {

ListView listView;
Response responseObj;
CustomAdapter adapter;
String url = "http://api.rottentomatoes.com/api/public/v1.0/lists/movies/box_office.json?apikey=9htuhtcb4ymusd73d4z6jxcj";
Gson gson;
OkHttpClient client;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.myList);
client = new OkHttpClient();

Request request = new Request.Builder().url(url).build();

client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {

}

@Override
public void onResponse(com.squareup.okhttp.Response response) throws IOException {
String responseStr = response.body().string();
gson = new Gson();
**responseObj = gson.fromJson(responseStr,Response.class);**
adapter = new CustomAdapter(MainActivity.this, responseObj.getMovies());
listView.setAdapter(adapter);

}
});

}
}

这是第 44 行的错误

FATAL EXCEPTION: OkHttp Dispatcher com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: Invalid double: ""

public class Response {



private String link_template;
/**
* id : 771312089
* title : The Hunger Games: Mockingjay - Part 2
* year : 2015
* mpaa_rating : PG-13
* runtime : 136
* critics_consensus :
* release_dates : {"theater":"2015-11-20"}
* ratings : {"critics_rating":"Fresh","critics_score":70,"audience_rating":"Upright","audience_score":71}
* synopsis : The second half of Suzanne Collins' final Hunger Games book is adapted in this Lionsgate production. ~ Jeremy Wheeler, Rovi
* posters : {"thumbnail":"http://resizing.flixster.com/nim-D7-9jGbUZS5wczNes_PmWyI=/53x81/dkpu1ddg7pbsk.cloudfront.net/movie/11/20/29/11202951_ori.jpg","profile":"http://resizing.flixster.com/nim-D7-9jGbUZS5wczNes_PmWyI=/53x81/dkpu1ddg7pbsk.cloudfront.net/movie/11/20/29/11202951_ori.jpg","detailed":"http://resizing.flixster.com/nim-D7-9jGbUZS5wczNes_PmWyI=/53x81/dkpu1ddg7pbsk.cloudfront.net/movie/11/20/29/11202951_ori.jpg","original":"http://resizing.flixster.com/nim-D7-9jGbUZS5wczNes_PmWyI=/53x81/dkpu1ddg7pbsk.cloudfront.net/movie/11/20/29/11202951_ori.jpg"}
* abridged_cast : [{"name":"Jennifer Lawrence","id":"770800260","characters":["Katniss Everdeen"]},{"name":"Julianne Moore","id":"162654248","characters":["President Alma Coin"]},{"name":"Gwendoline Christie","id":"771060732","characters":["Commander Lyme"]},{"name":"Josh Hutcherson","id":"162654356","characters":["Peeta Mellark"]},{"name":"Robert Knepper","id":"162707688","characters":["Antonius"]}]
* links : {"self":"http://api.rottentomatoes.com/api/public/v1.0/movies/771312089.json","alternate":"http://www.rottentomatoes.com/m/the_hunger_games_mockingjay_part_2/","cast":"http://api.rottentomatoes.com/api/public/v1.0/movies/771312089/cast.json","reviews":"http://api.rottentomatoes.com/api/public/v1.0/movies/771312089/reviews.json","similar":"http://api.rottentomatoes.com/api/public/v1.0/movies/771312089/similar.json"}
*/

private List<MoviesEntity> movies;

public void setLinks(LinksEntity links) {
this.links = links;
}

public void setLink_template(String link_template) {
this.link_template = link_template;
}

public void setMovies(List<MoviesEntity> movies) {
this.movies = movies;
}

public LinksEntity getLinks() {
return links;
}

public String getLink_template() {
return link_template;
}

public List<MoviesEntity> getMovies() {
return movies;
}

public static class LinksEntity {
private String self;
private String alternate;

public void setSelf(String self) {
this.self = self;
}

public void setAlternate(String alternate) {
this.alternate = alternate;
}

public String getSelf() {
return self;
}

public String getAlternate() {
return alternate;
}
}

public static class MoviesEntity {
private String id;
private String title;
private int year;
private String mpaa_rating;
private int runtime;
private String critics_consensus;
/**
* theater : 2015-11-20
*/

private ReleaseDatesEntity release_dates;
/**
* critics_rating : Fresh
* critics_score : 70
* audience_rating : Upright
* audience_score : 71
*/

private RatingsEntity ratings;
private String synopsis;
/**
* thumbnail : http://resizing.flixster.com/nim-D7-9jGbUZS5wczNes_PmWyI=/53x81/dkpu1ddg7pbsk.cloudfront.net/movie/11/20/29/11202951_ori.jpg
* profile : http://resizing.flixster.com/nim-D7-9jGbUZS5wczNes_PmWyI=/53x81/dkpu1ddg7pbsk.cloudfront.net/movie/11/20/29/11202951_ori.jpg
* detailed : http://resizing.flixster.com/nim-D7-9jGbUZS5wczNes_PmWyI=/53x81/dkpu1ddg7pbsk.cloudfront.net/movie/11/20/29/11202951_ori.jpg
* original : http://resizing.flixster.com/nim-D7-9jGbUZS5wczNes_PmWyI=/53x81/dkpu1ddg7pbsk.cloudfront.net/movie/11/20/29/11202951_ori.jpg
*/

private PostersEntity posters;
/**
* self : http://api.rottentomatoes.com/api/public/v1.0/movies/771312089.json
* alternate : http://www.rottentomatoes.com/m/the_hunger_games_mockingjay_part_2/
* cast : http://api.rottentomatoes.com/api/public/v1.0/movies/771312089/cast.json
* reviews : http://api.rottentomatoes.com/api/public/v1.0/movies/771312089/reviews.json
* similar : http://api.rottentomatoes.com/api/public/v1.0/movies/771312089/similar.json
*/

private LinksEntity links;
/**
* name : Jennifer Lawrence
* id : 770800260
* characters : ["Katniss Everdeen"]
*/

private List<AbridgedCastEntity> abridged_cast;

public void setId(String id) {
this.id = id;
}

public void setTitle(String title) {
this.title = title;
}

public void setYear(int year) {
this.year = year;
}

public void setMpaa_rating(String mpaa_rating) {
this.mpaa_rating = mpaa_rating;
}

public void setRuntime(int runtime) {
this.runtime = runtime;
}

public void setCritics_consensus(String critics_consensus) {
this.critics_consensus = critics_consensus;
}

public void setRelease_dates(ReleaseDatesEntity release_dates) {
this.release_dates = release_dates;
}

public void setRatings(RatingsEntity ratings) {
this.ratings = ratings;
}

public void setSynopsis(String synopsis) {
this.synopsis = synopsis;
}

public void setPosters(PostersEntity posters) {
this.posters = posters;
}

public void setLinks(LinksEntity links) {
this.links = links;
}

public void setAbridged_cast(List<AbridgedCastEntity> abridged_cast) {
this.abridged_cast = abridged_cast;
}

public String getId() {
return id;
}

public String getTitle() {
return title;
}

public int getYear() {
return year;
}

public String getMpaa_rating() {
return mpaa_rating;
}

public int getRuntime() {
return runtime;
}

public String getCritics_consensus() {
return critics_consensus;
}

public ReleaseDatesEntity getRelease_dates() {
return release_dates;
}

public RatingsEntity getRatings() {
return ratings;
}

public String getSynopsis() {
return synopsis;
}

public PostersEntity getPosters() {
return posters;
}

public LinksEntity getLinks() {
return links;
}

public List<AbridgedCastEntity> getAbridged_cast() {
return abridged_cast;
}

public static class ReleaseDatesEntity {
private String theater;

public void setTheater(String theater) {
this.theater = theater;
}

public String getTheater() {
return theater;
}
}

public static class RatingsEntity {
private String critics_rating;
private int critics_score;
private String audience_rating;
private int audience_score;

public void setCritics_rating(String critics_rating) {
this.critics_rating = critics_rating;
}

public void setCritics_score(int critics_score) {
this.critics_score = critics_score;
}

public void setAudience_rating(String audience_rating) {
this.audience_rating = audience_rating;
}

public void setAudience_score(int audience_score) {
this.audience_score = audience_score;
}

public String getCritics_rating() {
return critics_rating;
}

public int getCritics_score() {
return critics_score;
}

public String getAudience_rating() {
return audience_rating;
}

public int getAudience_score() {
return audience_score;
}
}

public static class PostersEntity {
private String thumbnail;
private String profile;
private String detailed;
private String original;

public void setThumbnail(String thumbnail) {
this.thumbnail = thumbnail;
}

public void setProfile(String profile) {
this.profile = profile;
}

public void setDetailed(String detailed) {
this.detailed = detailed;
}

public void setOriginal(String original) {
this.original = original;
}

public String getThumbnail() {
return thumbnail;
}

public String getProfile() {
return profile;
}

public String getDetailed() {
return detailed;
}

public String getOriginal() {
return original;
}
}

public static class LinksEntity {
private String self;
private String alternate;
private String cast;
private String reviews;
private String similar;

public void setSelf(String self) {
this.self = self;
}

public void setAlternate(String alternate) {
this.alternate = alternate;
}

public void setCast(String cast) {
this.cast = cast;
}

public void setReviews(String reviews) {
this.reviews = reviews;
}

public void setSimilar(String similar) {
this.similar = similar;
}

public String getSelf() {
return self;
}

public String getAlternate() {
return alternate;
}

public String getCast() {
return cast;
}

public String getReviews() {
return reviews;
}

public String getSimilar() {
return similar;
}
}

public static class AbridgedCastEntity {
private String name;
private String id;
private List<String> characters;

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

public void setId(String id) {
this.id = id;
}

public void setCharacters(List<String> characters) {
this.characters = characters;
}

public String getName() {
return name;
}

public String getId() {
return id;
}

public List<String> getCharacters() {
return characters;
}
}
}

 package com.example.nano1.gsonexample;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.squareup.picasso.Picasso;

import java.util.List;

public class CustomAdapter extends BaseAdapter {

private List<Response.MoviesEntity> mMovieItem;
private Context context;
private LayoutInflater inflater;

public CustomAdapter(Context context, List<Response.MoviesEntity> mMovieItem) {
this.context = context;
this.mMovieItem = mMovieItem;
}

@Override
public int getCount() {
return mMovieItem.size();
}

@Override
public Object getItem(int position) {
return mMovieItem.get(position);
}

@Override
public long getItemId(int position) {
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.each_list_item, parent, false);

Response.MoviesEntity item = (Response.MoviesEntity) getItem(position);
ImageView thumbnail = (ImageView) rowView.findViewById(R.id.thumnnail);
TextView title = (TextView) rowView.findViewById(R.id.title);
TextView rating = (TextView) rowView.findViewById(R.id.rating);
String imageURL = item.getPosters().getOriginal();
Picasso.with(context).load(imageURL).into(thumbnail);
title.setText(item.getTitle());
rating.setText(item.getRatings().getAudience_rating());


return rowView;
}
}

最佳答案

在上面声明的类中,您有 int 类型的成员,现在在响应中,您将这些成员的值作为空字符串 "" 获取,这是不允许的,它应该是一个整数。那是异常(exception),您要么:

1- 将成员类型更改为字符串,并在 setters/getters 中将空字符串处理为 0或

2-要求后端团队发送正确的数据或

3- 使用 custom TypedAdapter在 Gson 转换器中处理空字符串时的整数

P.S:我知道示例 json 不包含空字符串,但在服务的实际调用中,整数成员可能有空字符串

关于android - 当我尝试使用 Gson 从 Json 获取 responseObj 时出现错误。致命异常 : OkHttp Dispatcher NumberFormatException: Invalid double: "",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34236584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com