【问题标题】:Unable to get the Document list from mongodb server in Android无法从 Android 中的 mongodb 服务器获取文档列表
【发布时间】:2012-09-24 14:57:09
【问题描述】:

我正在使用 mongodb 作为我的 android 应用程序的云服务器。Mongodb java 库在 Android 中不起作用,所以我使用的是 rest api。我编写了以下代码来获取 json 响应并将它们转换为 MyClass 但它给出了 IllegalStateException与

    java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_Object at line 1 column 35

代码:

              try {  HttpGet mRequest = new HttpGet("https://api.mongolab.com/api/1/databases/mydb/collections/mycol?apiKey=myKey");    

                     DefaultHttpClient client = new DefaultHttpClient();
   try {
              HttpResponse response = client.execute(mRequest);

              InputStream source = response.getEntity().getContent();

              Reader reader = new InputStreamReader(source);

              Gson gson = new Gson();

          Type typeOfCollectionOfMyObject = new TypeToken<Collection<MYObject>>(){}.getType();

          quizDBObjectList = gson.fromJson(reader, typeOfCollectionOfMyObject);

          } catch (IOException e) {
          mRequest.abort();
          }

这不是全部代码,但我在这个块中遇到了异常。任何帮助?

MYObject的定义是

           public class MYObject { 

                   private long index ;
                   private String question;
                   private String answer;
                   private String optionA;
                   private String optionB;
                   private String optionC;
                   private String optionD;
                   private String createdAt;
                   private String active;
                //getters and setters of data members
      }

我得到的回应是:

                           [ { "_id" : { "$oid" : "505ab996aded66f4c1ccc7f2"} , "index" : 0 , "question" : "some text ?" , "optiona" : "optionA" , "optionb" : "optionB" , "optionc" : "OptionC" , "optiond" : "optionD" , "answer" : "answer" , "created_at" : { "$date" : "2012-09-20T06:37:04.306Z"} , "Active" : "1"} , { "_id" : { "$oid" : "505ab997aded66f4c1ccc7f3"} , "index" : 1 , ..../objects like that]

显然我不知道_id 将由服务器响应这一事实。 你能给我正确的类定义来将此 json 对象转换为我的自定义类吗?谢谢

【问题讨论】:

    标签: android json mongodb gson httpresponse


    【解决方案1】:

    java.lang.IllegalStateException:应为 BEGIN_ARRAY,但在第 1 行第 35 列是 BEGIN_Object

    这说明了一切,应该有[ 而不是{。也许你得到的是单个对象而不是数组?

    以上内容可能有帮助,也可能没有。为了得到更好的答案,需要以下内容:

    • MYObject 的定义
    • 准确解析的字符串

    你可以得到解析的字符串,例如通过从reader 读入StringBuider 或更简单地使用Guava 的CharStreams.toString(reader)

    【讨论】:

    • 谢谢@maaartinus,我已经编辑了我的问题,现在它应该给你清晰的图片了。
    • 我看不到问题所在,也许除了混淆了typeOfCollectionOfQuizDBObjecttypeOfCollectionOfMyObject,但这可能是在编写问题时发生的。使用上面给出的对象,唯一需要 BEGIN_ARRAY 的地方是一开始​​,这很满意。
    • 两者是相同的变量,我只是进行了更正。你的意思是 MYObject 足够正确以获取 json 对象?即 json 对象的键与我的自定义类的数据成员正确映射。
    • 其实没有,比如有"optiona" : "optionA",但是没有名为optiona的属性(有一个小“a”)。但这又可能是这里制作的一种类型,更重要的是:这不会导致报告的错误。正如预期的那样,某处必须有一些数组。尝试简化以定位问题:逐步删除所有内容,直到问题消失。由于未映射的属性被简单地忽略,它应该很容易。
    • 感谢您指出,通过对代码进行一些更改,我能够通过此错误,但是当我尝试从 MYObject 获取数据并将其放入 sqlite 时,我遇到了另一个异常.我会做出改变,看看这是否有效。
    猜你喜欢
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多