有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在Android中将表格从web传输到我的数据库

我正在制作一个应用程序,在这个应用程序中,我连接到一个网站,以json字符串的形式从我的web数据库下载一个表,我已经这样做了,在我的应用程序中显示为一个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 安卓.os.AsyncTask.finish(AsyncTask.java:602)
09-23 16:23:02.977: E/AndroidRuntime(6496):     at 安卓.os.AsyncTask.access$600(AsyncTask.java:156)
09-23 16:23:02.977: E/AndroidRuntime(6496):     at 安卓.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
09-23 16:23:02.977: E/AndroidRuntime(6496):     at 安卓.os.Handler.dispatchMessage(Handler.java:99)
09-23 16:23:02.977: E/AndroidRuntime(6496):     at 安卓.os.Looper.loop(Looper.java:154)
09-23 16:23:02.977: E/AndroidRuntime(6496):     at 安卓.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.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
09-23 16:23:02.977: E/AndroidRuntime(6496):     at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:551)
09-23 16:23:02.977: E/AndroidRuntime(6496):     at dalvik.system.NativeStart.main(Native Method)

共 (1) 个答案

  1. # 1 楼答案

    根据路易斯的建议,我的解决方案是:

    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);
      }
    }