2012-09-23 13 views
0

我做,我連接到一個網站的應用程序從我的Web數據庫的JSON字符串下載一個表格,我都做了,我的應用程序轉移表我的數據庫顯示,作爲webArray。我創建了一個數據庫輔助類來在應用程序內部創建和編輯我的數據庫,我的問題是我無法將數據從我的webArray傳輸到我的數據庫,下面是一些代碼,或許可以幫助我指出正確的方向。如何從網絡中的Android

mainActivity:

//this is our download file asynctask 
class DownloadFileAsync extends AsyncTask<String, String, String> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     showDialog(DIALOG_DOWNLOAD_PROGRESS2); 
    } 

    @Override 
    protected String doInBackground(String... aurl) { 

     try { 
     String result = ""; 
        try { 
         HttpClient httpclient = new DefaultHttpClient(); 
         HttpPost httppost = new HttpPost("http://mywebsite"); 
         // httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
         HttpResponse response = httpclient.execute(httppost); 
         HttpEntity entity = response.getEntity(); 
         InputStream webs = entity.getContent(); 
         // convert response to string 
         try { 
          BufferedReader reader = new BufferedReader(
            new InputStreamReader(webs, "iso-8859-1"), 8); 
          StringBuilder sb = new StringBuilder(); 
          String line = null; 
          while ((line = reader.readLine()) != null) { 
           sb.append(line + "\n"); 
          } 
          webs.close(); 

          result = sb.toString(); 
         } catch (Exception e) { 
          Log.e("log_tag", "Error converting result " + e.toString()); 
          return "ERROR_IN_CODE"; 
         } 
        } catch (Exception e) { 
         Log.e("log_tag", "Error in http connection " + e.toString()); 
         return "ERROR_IN_CODE"; 
        } 

        // parse json data 
        try { 
         JSONArray jArray = new JSONArray(result); 
         for (int i = 0; i < jArray.length(); i++) { 
          JSONObject json_data = jArray.getJSONObject(i); 
          webResultCuestionario resultRow3 = new webResultCuestionario(); 
          resultRow3._id = json_data.getString("id"); 
          resultRow3.pregunta = json_data.getString("Question"); 
          resultRow3.respuesta = json_data.getString("Answer"); 
          CuestionarioArray.add(resultRow3); 
         } 
        } catch (JSONException e) { 
         Log.e("log_tag", "Error parsing data " + e.toString()); 
         return "ERROR_IN_CODE"; 
        } 
    } catch (Exception e) { 
     // this is the line of code that sends a real error message to the 
     // log 
     Log.e("ERROR", "ERROR IN CODE: " + e.toString()); 
     // this is the line that prints out the location in 
     // the code where the error occurred. 
     e.printStackTrace(); 
     return "ERROR_IN_CODE"; 
    } 
     return null; 
    } 

    protected void onProgressUpdate(String... progress) { 
     Log.d(LOG_TAG,progress[0]); 
     mProgressDialog2.setProgress(Integer.parseInt(progress[0])); 
    } 

    @Override 
    protected void onPostExecute(String unused) { 
     //dismiss the dialog after the file was downloaded 
     dismissDialog(DIALOG_DOWNLOAD_PROGRESS2); 
     if(unused != null && unused.equals("ERROR_IN_CODE")){ 
      errornote2(); 
     }else{ 
      tvCuestionario.setText("Cuestionario encontrado"); 
      addCuestionarioToDb(); 
     } 
    } 
} 

public void addCuestionarioToDb(){ 
for (webResultCuestionario currentItem: CuestionarioArray){ 
    int cis = Integer.parseInt(currentItem._id); 
    db.insertCuestionario(CuestionarioArray.get(cis).pregunta, CuestionarioArray.get(cis).respuesta); 
} 
} 
我CuestionarioHelper類

public class CuestionarioHelper extends SQLiteOpenHelper { 

private static final String DATABASE_NAME="cuestionario.db"; 
private static final int SCHEMA_VERSION=1; 

public CuestionarioHelper(Context context) { 
    super(context, DATABASE_NAME, null, SCHEMA_VERSION); 
} 
@Override 
public void onCreate(SQLiteDatabase db) { 

    db.execSQL("CREATE TABLE Cuestionario (_id INTEGER PRIMARY KEY AUTOINCREMENT, pregunta TEXT, respuesta TEXT);"); 
    } 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

} 

    public void insertCuestionario(String pregunta, String respuesta) { 
    ContentValues cv=new ContentValues(); 
    cv.put("pregunta", pregunta); 
    cv.put("respuesta", respuesta); 
    getWritableDatabase().insert("Cuestionario", null, cv); 
} 

日誌

09-23 16:23:02.977: E/AndroidRuntime(6496): FATAL EXCEPTION: main 
09-23 16:23:02.977: E/AndroidRuntime(6496): java.lang.IndexOutOfBoundsException: Invalid index 100, size is 100 
09-23 16:23:02.977: E/AndroidRuntime(6496):  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 
09-23 16:23:02.977: E/AndroidRuntime(6496):  at java.util.ArrayList.get(ArrayList.java:304) 
09-23 16:23:02.977: E/AndroidRuntime(6496):  at VerCuestionarioEspanol_copy.MainActivity.addCuestionarioToDb(MainActivity.java:580) 
09-23 16:23:02.977: E/AndroidRuntime(6496):  at VerCuestionarioEspanol_copy.MainActivity$DownloadFile3Async.onPostExecute(MainActivity.java:46 2) 
09-23 16:23:02.977: E/AndroidRuntime(6496):  at VerCuestionarioEspanol_copy.MainActivity$DownloadFile3Async.onPostExecute(MainActivity.java:1) 
09-23 16:23:02.977: E/AndroidRuntime(6496):  at android.os.AsyncTask.finish(AsyncTask.java:602) 
09-23 16:23:02.977: E/AndroidRuntime(6496):  at android.os.AsyncTask.access$600(AsyncTask.java:156) 
09-23 16:23:02.977: E/AndroidRuntime(6496):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) 
09-23 16:23:02.977: E/AndroidRuntime(6496):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-23 16:23:02.977: E/AndroidRuntime(6496):  at android.os.Looper.loop(Looper.java:154) 
09-23 16:23:02.977: E/AndroidRuntime(6496):  at android.app.ActivityThread.main(ActivityThread.java:4977) 
09-23 16:23:02.977: E/AndroidRuntime(6496):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-23 16:23:02.977: E/AndroidRuntime(6496):  at java.lang.reflect.Method.invoke(Method.java:511) 
09-23 16:23:02.977: E/AndroidRuntime(6496):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
09-23 16:23:02.977: E/AndroidRuntime(6496):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
09-23 16:23:02.977: E/AndroidRuntime(6496):  at dalvik.system.NativeStart.main(Native Method) 
+0

究竟是什麼問題? – dor506

+0

@ dor506,以及沒有添加項目。也許會有不同的方式來添加它們? – zvzej

+0

奇怪。你沒有得到任何異常?檢查日誌 – dor506

回答

0

由路易斯建議我的解決辦法是:

public void addCuestionarioToDb(){ 
    for (webResultCuestionario currentItem: CuestionarioArray){ 
    int cis = Integer.parseInt(currentItem._id)-1; // just added the -1 here and runs perfect 
    db.insertCuestionario(CuestionarioArray.get(cis).pregunta, CuestionarioArray.get(cis).respuesta); 
    } 
}