Gson,cursor.getString在读取JSON字符串数组时崩溃了应用程序

时间:2018-02-03 01:43:04

标签: android json arraylist android-sqlite gson

我写了一个较小的代码测试,在我的应用程序中给我带来麻烦。数据库的打开和关闭只来自我的应用程序中的两个活动,我希望它尽可能接近。我一直在

  

com.google.gson.JsonSyntaxException:        java.lang.IllegalStateException:预期BEGIN_ARRAY        但是在第1行第2列路径$ NUM的

并且无法弄清楚它为什么会出现这个错误,因为它应该只是读取一个字符串的arraylist。 COLUMN_DATE是一个字符串类型。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id='OrderAssignToApprover_9002e96d-1276-4355-9a2a-0c565d8079db_$DropDownChoice'>
<option>One</option>
<option selected>two</option>
</select>
<br>
<button>Select</button>

我很奇怪为什么Type类用于解码我的BigDecimal arraylists而不是我的date日期。我尝试将字符串作为建议的第一个答案,虽然它在片段中起作用但它只会像日期的随机部分的第一个数字一样。例如:

public class MainActivity extends AppCompatActivity {

    public ArrayList dateAr = new ArrayList<String>(Arrays.asList("01-02-2016", "08-02-2016", "15-02-2016", "15-07-2019"));

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Gson gson = new Gson();
        String dateString = gson.toJson(dateAr);

        Type type = new TypeToken<ArrayList<String>>() {
        }.getType();

        SQLiteDatabaseHandler mDbHelper = new SQLiteDatabaseHandler(this);

        SQLiteDatabase db = mDbHelper.getWritableDatabase();


        ContentValues values = new ContentValues();
        values.put(DataContract.DataEntry.COLUMN_DATE, dateString);

        System.out.print(dateString);

        db.close();


        SQLiteDatabaseHandler mBBHelper = new SQLiteDatabaseHandler(getApplicationContext());
        SQLiteDatabase BB = mBBHelper.getWritableDatabase();

        String query = "SELECT  * FROM " + DataContract.DataEntry.TABLE_NAME;

        Cursor cursor = BB.rawQuery(query, null);

        while (cursor.moveToNext()) {
            dateAr = gson.fromJson(cursor.getString(0), type);
        }
            cursor.close();


            dateAr = gson.fromJson(dateString, type);


            System.out.print(dateAr);


    }
}

当我第一次将我的arraylists的Json版本放入数据库时​​,也可能是相关的:

        while(cursor.moveToNext()) {
            dateAr.add(cursor.getString(0));
            payAr = gson.fromJson(cursor.getString(1), DB);
            intAr = gson.fromJson(cursor.getString(2), DB);
            prinAr = gson.fromJson(cursor.getString(3), DB);
            balAr = gson.fromJson(cursor.getString(4), DB);
}
           cursor.close()

1 个答案:

答案 0 :(得分:0)

我明白了!我已经将结构从日历的arraylist转换为字符串的arraylist并且没有意识到旧的数据仍在数据库中,所以它试图错误地读取日历。最初我也错误地阅读日历,因为我并没有坚持其类结构。添加刷新类可以解决问题:

public void refresh(SQLiteDatabase db){
    db.execSQL("DROP TABLE IF EXISTS " + DataContract.DataEntry.TABLE_NAME);
    onCreate(db);
}

我从来不想长期存储数据我只需要一种方法来传递大量数据,而不是意图。