私はAndroidアプリのクラウドサーバーとしてmongodbを使用しています。Mongodbjavaライブラリは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オブジェクトをカスタマイズしたクラスにキャストするための正しいクラス定義を教えてください。ありがとう