I'm making an application where I connect to a website to download a table from my web database in a json string, that I have done, in my app shows as a webArray. I have created a database helper class to create and edit my db inside the application, my problem is that I'm failing on transferring the data from my webArray to my db, here is some pieces of code maybe you could help pointing me on the right direction.
我正在创建一个应用程序,我连接到一个网站,从我的网络数据库中以json字符串下载表格,我已经完成了,在我的应用程序中显示为webArray。我已经创建了一个数据库助手类来在应用程序中创建和编辑我的数据库,我的问题是我无法将数据从我的webArray传输到我的数据库,这里有一些代码可能你可以帮我指点我正确的方向。
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);
}
}
in my CuestionarioHelper Class:
在我的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);
}
the log
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)
1 个解决方案
#1
0
My solution as suggested by Luis was:
我的解决方案是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);
}
}
#1
0
My solution as suggested by Luis was:
我的解决方案是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);
}
}