0

我正在制作一个应用程序,在该应用程序中我连接到一个网站,以从我的 web 数据库中下载一个 json 字符串中的表,我已经完成,在我的应用程序中显示为 webArray。我创建了一个数据库帮助器类来在应用程序中创建和编辑我的数据库,我的问题是我无法将数据从我的 webArray 传输到我的数据库,这里有一些代码也许你可以帮助指出我正确的方向。

主要活动:

  //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)
4

1 回答 1

0

Luis 建议的我的解决方案是:

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);
  }
}
于 2012-09-25T18:14:03.320 回答