【问题标题】:gson,fromJson returning null. Androidgson,fromJson 返回 null。安卓
【发布时间】:2016-05-11 20:31:49
【问题描述】:

在搜索了很长时间之后,我真的坚持这一点。 我有一个称为响应的 Json 字符串。

Gson gson = new Gson();
SearchResult searchResult = gson.fromJson(response, SearchResult.class);

searchResult 始终为空。

这是 SearchResult 类:

public class SearchResult implements Serializable{


public SearchResult() {
    }


    private List<MyMarkerResponse> myMarkersList;

    public List<MyMarkerResponse> getSearch() {
        return myMarkersList;
    }

    public void setSearch(List<MyMarkerResponse> search) {
        myMarkersList = search;
    }

这是 json 响应:

{"myMarkerList":[{"notes":"now","_id":5096363633147904,"latitude":51.52753303816573,"longitude":-0.15742387622594833,"title":"home"},{"notes":"","_id":5137355874762752,"latitude":51.46299731478184,"longitude":-0.015837103128433228,"title":""},{"notes":"","_id":5167132077719552,"latitude":44.890621596087136,"longitude":42.57036656141281,"title":"cat"},{"notes":"new place","_id":5631986051842048,"latitude":65.7773746361831,"longitude":107.60726854205132,"title":"hello"},{"notes":"new place","_id":5692462144159744,"latitude":65.7773746361831,"longitude":107.60726854205132,"title":"hello"},{"notes":"","_id":5720147234914304,"latitude":51.51407752981666,"longitude":-0.12392342090606688,"title":""},{"notes":"place","_id":5730082031140864,"latitude":61.10287229393116,"longitude":88.51000271737576,"title":"new"},{"notes":"","_id":5749328048029696,"latitude":23.44142818293187,"longitude":20.003406554460526,"title":""},{"notes":"now","_id":5769015641243648,"latitude":51.52753303816573,"longitude":-0.15742387622594833,"title":"home"}]}

这是 MyMarkerResponse 类:

public class MyMarkerResponse implements Serializable{

public MyMarkerResponse() {
}    

    private String notes;

    private Long _id;

    private double latitude;

    private double longitude;

    private String title;

    public Long get_id() {
        return _id;
    }

    public void set_id(Long _id) {
        this._id = _id;
    }

    public double getLatitude() {
        return latitude;
    }

    public void setLatitude(double latitude) {
        this.latitude = latitude;
    }

    public double getLongitude() {
        return longitude;
    }

    public void setLongitude(double longitude) {
        this.longitude = longitude;
    }

    public String getTitle() {
        return title;
    }

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

    public String getNotes() {
        return notes;
    }

    public void setNotes(String notes) {
        this.notes = notes;
    }




}

当我调用 searchResult.getSearch() 我得到这个错误:

java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference

如果你能帮忙,请!!

【问题讨论】:

  • 简单的错别字 -> 关闭

标签: android json nullpointerexception gson


【解决方案1】:

您在 POJO 中拼错了 myMarkerList。目前你有:

private List<MyMarkerResponse> myMarkersList;

检查您的拼写(删除“s”)。

【讨论】:

  • 谢谢。是拼写!谢谢一百万。
【解决方案2】:

我的朋友使用这个网站:JSON schema to POJO

如果你在 POJO 中使用Gson,你需要注解。

选择源类型:JSON和注释样式Gson

粘贴您的示例 Json 响应并生成它。

【讨论】:

    【解决方案3】:

    您的SearchResult POJO 对于您希望反序列化的 JSON 不正确。具体来说,主要的 JSON 对象只包含一个名为“myMarkerList”的属性/属性/键。所以你的 POJO 应该同样包含一个列表/数组类型的属性。您需要将其更改为:

    public class SearchResult {
    
        private List<MyMarkerResponse> myMarkerList;
    
        public List<MyMarkerResponse> getSearch() {
            return myMarkerList;
        }
    
        public void setSearch(List<MyMarkerResponse> search) {
            Search = myMarkerList;
        }
    }
    

    更新: 我意识到代码本身是正确的,您只需要使用不同的fromJson 函数(以Type 作为第二个参数的函数):

    Gson gson = new Gson();
    Type searchResultType = new TypeToken<SearchResult>() {}.getType();
    SearchResult searchResult = gson.fromJson(response, searchResultType);
    

    那么您的代码应该可以按预期工作。 请试一试,如果有帮助,请告诉我。

    【讨论】:

    • 这不起作用。这与我的代码相同,只是您将 List 的名称更改为 myMarkerList(而不是 Search)。还是不行,谢谢
    • 这很奇怪,你能不能让你的 SearchResultMyMarkerResponse 实现 Serializable,还添加无参数构造函数 - 比如:public SearchResult(){}public MyMarkerResponse(){}
    • 我现在能想到的一件事是使用ArrayList 而不仅仅是List 作为myMarkerList 的类型。另外,请输入您更新的代码,以便我们查看更改是如何应用的。
    • 感谢您的编辑。所以responseString 不是JSON 对象?我会尝试在我这边重现这个。也许我们错过了什么......
    • 嗨,我设法解决了这个问题 - 我必须使用方法签名:fromJson(String json, Type typeOfT)。如果解决了您的问题,请尝试该建议并接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    相关资源
    最近更新 更多