【问题标题】:Volley loading data to sqlite randomlyVolley 将数据随机加载到 sqlite
【发布时间】:2016-02-17 20:10:05
【问题描述】:

我正在使用VolleyJSON 字符串加载到SQLite,但我遇到了Volley 随机填充SQLite 字段的问题,有一次一个字段与JSON 在第二次相同的字段为空。

我正在考虑实现进度对话框,也许UI 线程可以停止Volley,但我不确定...

我的方法:

private void loadJsonToSQLite() {
    RequestQueue queue = Volley.newRequestQueue(this);
    mDB = this.openOrCreateDatabase(Constants.DATABASE_NAME, MODE_PRIVATE, null);


    for (int i = 0; i < routeArray.length; i++) {

        if (!mDB.isOpen()) {
            mDB = getApplicationContext().openOrCreateDatabase(Constants.DATABASE_NAME, MODE_PRIVATE, null);
        }

        final String urlPart = routeArray[i];
        final String urlPartReverse = routeArrayReverse[i];
        final String tableName = "[" + urlPart + "]";

        mDB.execSQL("CREATE TABLE " + tableName + " (keyId INTEGER PRIMARY KEY, route TEXT, routeReverse TEXT)");


        StringRequest stringRequest = new StringRequest(Request.Method.GET, url + urlPart,
                new Response.Listener<String>() {
                    @Override

                    public void onResponse(String response) {

                        Matcher m = MY_PATTERN.matcher(response);

                        if (m.find()) {
                            String extracted = m.group(1).trim();
                            ContentValues initialValues = new ContentValues();

                            initialValues.put("keyId", 1);
                            initialValues.put("route", extracted);


                            if (!mDB.isOpen()) {
                                mDB = getApplicationContext().openOrCreateDatabase(Constants.DATABASE_NAME, MODE_PRIVATE, null);

                            }
                            mDB.insert(tableName, null, initialValues);
                        }

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
            }
        });

        queue.add(stringRequest);
        mDB.close();


        StringRequest stringRequestReverse = new StringRequest(Request.Method.GET, url + urlPartReverse,
                new Response.Listener<String>() {
                    @Override

                    public void onResponse(String response) {

                        Matcher m = MY_PATTERN.matcher(response);

                        if (m.find()) {
                            String extracted = m.group(1).trim();
                            ContentValues initialValues = new ContentValues();

                            initialValues.put("routeReverse", extracted);


                            if (!mDB.isOpen()) {
                                mDB = getApplicationContext().openOrCreateDatabase(Constants.DATABASE_NAME, MODE_PRIVATE, null);

                            }
                            mDB.update(tableName,initialValues,null,null);
                        }

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
        queue.add(stringRequestReverse);
        mDB.close();

    }


}

也许我在 Volley 的某个地方搞错了?

我在不同的链接结尾有JSON 字符串,因为我正在使用循环。

【问题讨论】:

    标签: android json sqlite


    【解决方案1】:

    自己解决,只需添加第二个循环,据我了解 2 个Volley 请求可以存在于一个循环中

    【讨论】:

      猜你喜欢
      • 2012-08-14
      • 2015-11-14
      • 1970-01-01
      • 2021-03-31
      • 2018-04-07
      • 2017-03-21
      • 2021-05-04
      • 2019-12-09
      • 1970-01-01
      相关资源
      最近更新 更多