2016-02-17 69 views
0

我使用Volley加载JSON字符串到SQLite,但我面临问题,即Volley填充SQLite随机字段,一个时间一个字段是具有JSON在第二次相同的字段是空的。凌空加载数据到SQLITE随机

我正在考虑实施进度对话框,也许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字符串在不同的链接 - 结束,因为我使用循环。

回答

0

解决它自己,只需添加第二个循环,因为我明白2 Volley请求可以住在一个循环