2

我有这个 JSON:

{
    "meta": {
        "status": 200,
        "msg": "OK"
    },
    "response": {
        "blog": {
            "title": "Poema do Dia",
            "name": "poemadodia",
            "posts": 381,
            "url": "http://poemadodia.tumblr.com/",
            "updated": 1380565297,
            "description": "Um pouco do que eu penso e sinto em forma de rimas e prosas.",
            "ask": true,
            "ask_anon": true,
            "is_nsfw": false,
            "share_likes": false
        },
        "posts": [
            {
                "blog_name": "poemadodia",
                "id": 62732663432,
                "post_url": "http://poemadodia.tumblr.com/post/62732663432/maluquinha",
                "slug": "maluquinha",
                "type": "text",
                "date": "2013-09-30 18:21:37 GMT",
                "timestamp": 1380565297,
                "state": "published",
                "format": "html",
                "reblog_key": "gdXogVQ1",
                "tags": [
                    "amor",
                    "soneto"
                ],
                "short_url": "http://tmblr.co/ZnrkhxwRA7g8",
                "highlighted": [],
                "note_count": 1,
                "title": "Maluquinha",
                "body": "<p>Ela é doida, demais<br/>Acorda daquele jeito<br/>Mas ela me satisfaz<br/>Dorme sobre meu peito</p>\n<p>Um amor que não esperei<br/>Que não foi de propósito<br/>Se tornou o que sonhei<br/>Mesmo sendo meu opósito</p>\n<p>Hoje a amo simplesmente<br/>E não me sinto tão carente<br/>Ela é a minha medida</p>\n<p>Começou inconsciente<br/>Um amor tão displicente<br/>Mas o amor da minha vida</p>"
            }
        ],
        "total_posts": 375
    }
}

而这些类来抽象这些数据:

PoemaDoDia.java

package br.com.wgbn.vo;

import io.leocad.dumbledroid.data.AbstractModel;
import io.leocad.dumbledroid.data.DataType;

import java.util.List;
import java.util.Vector;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;

import android.content.Context;

public class PoemaDoDia extends AbstractModel {

    public List<Meta> meta;
    public List<Response> response;

    public PoemaDoDia() {
        super("http://api.tumblr.com/v2/blog/poemadodia.tumblr.com/posts/text");
    }

    /* 
     * api_key=xxx
     * limit=1 
     * offset=374 
     * */
    public void load(Context ctx, String offset) throws Exception {

        List<NameValuePair> params = new Vector<NameValuePair>();
        params.add(new BasicNameValuePair("api_key", "xxx"));
        params.add(new BasicNameValuePair("limit", "1"));
        if (Integer.parseInt(offset) > 0){
            params.add(new BasicNameValuePair("offset", offset));
        }


        super.load(ctx, params);
    }

    @Override
    protected DataType getDataType() {
        return DataType.JSON;
    }

}

元.java

package br.com.wgbn.vo;

import java.io.Serializable;
import java.util.List;

public class Meta implements Serializable {

    public int status;
    public String msg;

}

响应.java

package br.com.wgbn.vo;

import java.io.Serializable;
import java.util.List;

public class Response implements Serializable {

    public List<Blog> blog;
    public List<Posts> posts;
    public int total_posts;

}

博客.java

package br.com.wgbn.vo;

import java.io.Serializable;


public class Blog implements Serializable {

    public String title;
    public String name;
    public int posts;
    public String url;
    public String updated;
    public String description;
    public Boolean ask;
    public Boolean ask_anon;
    public Boolean is_nsfw;
    public Boolean share_likes;

}

帖子.java

package br.com.wgbn.vo;

import java.io.Serializable;
import java.util.List;

public class Posts implements Serializable {

    public String blog_name;
    public String id;
    public String post_url;
    public String slug;
    public String type;
    public String date;
    public String timestamp;
    public String state;
    public String format;
    public String reblog_key;
    public List<String> tags;
    public String short_url;
    public List<String> highlighted;
    public int note_count;
    public String title;
    public String body;

}

实现了 Dumbledroid 以使工作更实用,但我无法访问返回的节点。 https://github.com/leocadiotine/Dumbledroid

在我看来,错误是这样的:

org.json.JSONException: Value {"posts":[{"tags":["amor","soneto"],"body":"<p>Ela é doida, demais<br\/>Acorda daquele jeito<br\/>Mas ela me satisfaz<br\/>Dorme sobre meu peito<\/p>\n<p>Um amor que não esperei<br\/>Que não foi de propósito<br\/>Se tornou o que sonhei<br\/>Mesmo sendo meu opósito<\/p>\n<p>Hoje a amo simplesmente<br\/>E não me sinto tão carente<br\/>Ela é a minha medida<\/p>\n<p>Começou inconsciente<br\/>Um amor tão displicente<br\/>Mas o amor da minha vida<\/p>","blog_name":"poemadodia","post_url":"http:\/\/poemadodia.tumblr.com\/post\/62732663432\/maluquinha","reblog_key":"gdXogVQ1","state":"published","highlighted":[],"format":"html","date":"2013-09-30 18:21:37 GMT","type":"text","timestamp":1380565297,"id":62732663432,"title":"Maluquinha","short_url":"http:\/\/tmblr.co\/ZnrkhxwRA7g8","slug":"maluquinha","note_count":1}],"blog":{"share_likes":false,"title":"Poema do Dia","is_nsfw":false,"updated":1380565297,"description":"Um pouco do que eu penso e sinto em forma de rimas e prosas.","name":"poemadodia","posts":381,"ask":true,"ask_anon":true,"url":"http:\/\/poemadodia.tumblr.com\/"},"total_posts":375} at response of type org.json.JSONObject cannot be converted to JSONArray

我一直在研究,错误一定是因为收到的 JSON 包含一个对象而不是一个数组,但是由于 JSON 是由 Tumblr API 生成的,我无法控制它,也不要出去解决我的问题。

有什么建议么?

4

1 回答 1

6

您的代码的问题是因为您将某些元素声明为Lists,但它们是单个对象。例如,在 上PoemaDoDia.java,您有:

public List<Meta> meta;

并且对应的 JSON 不是数组:

"meta": {
    "status": 200,
    "msg": "OK"
}

所以,如果你纠正了这些问题,Dumbledroid 就可以工作了。只需将PoemaDoDia.java的属性更改为:

public Meta meta;
public Response response;

Response.java的属性为:

public Blog blog;
public List<Posts> posts;
public int total_posts;

它会起作用。

希望能帮助到你!

PS:最好从您的问题中删除您的 Tumblr API 密钥。人们可能会将其用于不良目的,并且您的密钥可能会被阻止!

于 2013-10-03T18:17:20.700 回答