2016-02-17 101 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請求可以住在一個循環