Android json analizar y almacenar en la base de datos

Estoy haciendo una aplicación que tienen una base de datos y ahora estoy tratando de almacenar los datos mediante este método y obtener el error javanullpointer,

JSONParser jParser = new JSONParser(); JSONObject json = jParser.getJSONFromUrl(url); // TODO Auto-generated method stub JSONArray Erate= json.getJSONArray("Erates"); if(Erate!=null) { // looping through All Contacts for(int i = 0; i < Erate.length(); i++){ JSONObject c = Erate.getJSONObject(i); Cursor cr = db.rawQuery("select * from `rates` where `id`='"+c.getString("id")+"'",null); String query= "Insert into rates(id,kondisi,condition,tenor,erate,erateDB)"+ "values("+ c.getString("id")+",'"+ c.getString("....") +"')"; db.execSQL(query); Log.d("Insert",query); cr.close();} } 

Y entonces intento otro método (esto también da el mismo error)

  for (int i = 0; i < Erates.length(); i++) { JSONObject c = Erates.getJSONObject(i); int id = c.getInt(TAG_ER_ID); int tenor = c.getInt(TAG_ER_TENOR); String ko = c.getString(TAG_ER_K); String co = c.getString(TAG_ER_C); double rate = c.getDouble(TAG_ER_RATE); double ratedb = c.getDouble(TAG_ER_RATE_DB); Log.d("Response test: ", id + "\n" + tenor + "\n" + ko + "\n" + co + "\n" + rate + "\n" + ratedb); /** * Updating parsed JSON data into db * */ db.saveEntryEffectiveRate(id, tenor,ko,co, rate,ratedb); } 

SaveEntryEffectiveRate en la base de datos:

 public void saveEntryEffectiveRate(int id, int tenor,String ko,String co, double rate, double ratedb) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues valuesER = new ContentValues(); valuesER.put(KEY_ER_ID, id); valuesER.put(KEY_ER_TENOR, tenor); valuesER.put(KEY_ER_KO, ko); valuesER.put(KEY_ER_CO, co); valuesER.put(KEY_ER_RATE, rate); valuesER.put(KEY_ER_RATE_DB, ratedb); db.insert(TABLE_EFFECTIVE_RATE, null, valuesER); } 

ACTUALIZACIÓN: logcat:

 04-23 16:44:14.044: E/AndroidRuntime(6752): FATAL EXCEPTION: main 04-23 16:44:14.044: E/AndroidRuntime(6752): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{www.mandiritunasfinancemobile.co.id.a1s2d3f4g5h6j7k8l9.p0.comcom/www.mandiritunasfinancemobile.co.id.a1s2d3f4g5h6j7k8l9.p0.comcom.MainActivity}: java.lang.NullPointerException 04-23 16:44:14.044: E/AndroidRuntime(6752): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1544) 04-23 16:44:14.044: E/AndroidRuntime(6752): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638) 04-23 16:44:14.044: E/AndroidRuntime(6752): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 04-23 16:44:14.044: E/AndroidRuntime(6752): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928) 04-23 16:44:14.044: E/AndroidRuntime(6752): at android.os.Handler.dispatchMessage(Handler.java:99) 04-23 16:44:14.044: E/AndroidRuntime(6752): at android.os.Looper.loop(Looper.java:123) 04-23 16:44:14.044: E/AndroidRuntime(6752): at android.app.ActivityThread.main(ActivityThread.java:3647) 04-23 16:44:14.044: E/AndroidRuntime(6752): at java.lang.reflect.Method.invokeNative(Native Method) 04-23 16:44:14.044: E/AndroidRuntime(6752): at java.lang.reflect.Method.invoke(Method.java:507) 04-23 16:44:14.044: E/AndroidRuntime(6752): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 04-23 16:44:14.044: E/AndroidRuntime(6752): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 04-23 16:44:14.044: E/AndroidRuntime(6752): at dalvik.system.NativeStart.main(Native Method) 04-23 16:44:14.044: E/AndroidRuntime(6752): Caused by: java.lang.NullPointerException 04-23 16:44:14.044: E/AndroidRuntime(6752): at www.mandiritunasfinancemobile.co.id.a1s2d3f4g5h6j7k8l9.p0.comcom.MainActivity.<init>(MainActivity.java:55) 04-23 16:44:14.044: E/AndroidRuntime(6752): at java.lang.Class.newInstanceImpl(Native Method) 04-23 16:44:14.044: E/AndroidRuntime(6752): at java.lang.Class.newInstance(Class.java:1409) 04-23 16:44:14.044: E/AndroidRuntime(6752): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 04-23 16:44:14.044: E/AndroidRuntime(6752): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1536) 04-23 16:44:14.044: E/AndroidRuntime(6752): ... 11 more 

ACTUALIZACIÓN: DB:

 public class DatabaseMaster2 extends SQLiteOpenHelper { SQLiteDatabase mydb; // Database Version private static final int DATABASE_VERSION = 7; // Database Name private static final String DATABASE_NAME = "Rates"; // Table Names //effective_rate public static final String KEY_ER_ID = "er_id"; public static final String KEY_ER_TENOR = "ER_tenor"; public static final String KEY_ER_KO = "ER_ko"; public static final String KEY_ER_CO = "ER_co"; public static final String KEY_ER_RATE = "ER_rate"; public static final String KEY_ER_RATE_DB = "ER_rate_DB" ; //ER_Linker public static final String KEY_ER_L_ID = "kondisi_id"; public static final String KEY_ER_L_K = "kondisi"; public static final String KEY_ER_L_C = "condition"; //AS_Linker public static final String KEY_AS_L_ID = "asuransi_type_id"; public static final String KEY_AS_L_Ty = "asuransi_type"; //AS_linker_zona public static final String KEY_AS_L_Z_ID = "aslz_id"; public static final String KEY_AS_L_Z_ZONA = "aslz_zona"; public static final String KEY_AS_L_Z_ZONE = "aslz_zone"; // Asuransi rate public static final String KEY_AS_ID = "as_id"; public static final String KEY_AS_ZO = "AS_zona"; public static final String KEY_AS_TENOR = "AS_tenor"; public static final String KEY_AS_TLO = "TLO"; public static final String KEY_AS_COMPREHENSIVE = "Comprehensive"; public static final String KEY_AS_COMBINE = "Combine"; //the tables public static final String TABLE_EFFECTIVE_RATE = "effective_rate"; public static final String TABLE_ASURANSI_RATE = "asuransi_rate"; public static final String TABLE_AS_LINKER = "as_linker"; public static final String TABLE_AS_L_ZONA= "as_l_zona"; public static final String TABLE_ER_LINKER = "er_linker"; public DatabaseMaster2(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub try { db.beginTransaction(); db.execSQL("CREATE TABLE " + TABLE_ER_LINKER + " ("+ KEY_ER_L_K + " TEXT NOT NULL," + KEY_ER_L_C+ " TEXT NOT NULL)"); db.execSQL("CREATE TABLE " + TABLE_AS_LINKER + " ("+ KEY_AS_L_Ty + " TEXT NOT NULL)"); db.execSQL("CREATE TABLE " + TABLE_AS_L_ZONA + " ("+ KEY_AS_L_Z_ZONA + " TEXT NOT NULL, " + KEY_AS_L_Z_ZONE + " TEXT NOT NULL)"); db.execSQL("CREATE TABLE " + TABLE_EFFECTIVE_RATE + " ("+ KEY_ER_ID + " INTEGER PRIMARY KEY, " + KEY_ER_TENOR+" INTEGER," +KEY_ER_KO+" TEXT NOT NULL, "+KEY_ER_CO+" TEXT NOT NULL, "+KEY_ER_RATE+" REAL, "+ KEY_ER_RATE_DB + " REAL)"); db.execSQL("CREATE TABLE " + TABLE_ASURANSI_RATE + " ("+ KEY_AS_ID + " INTEGER PRIMARY KEY, "+ KEY_AS_ZO + " INTEGER, " + KEY_AS_TENOR+ " INTEGER," + KEY_AS_TLO + " REAL,"+ KEY_AS_COMPREHENSIVE + " REAL," + KEY_AS_COMBINE+ " REAL)"); // Inserts pre-defined departments db.setTransactionSuccessful(); } finally { db.endTransaction(); } } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub db.execSQL("DROP TABLE IF EXISTS " + TABLE_EFFECTIVE_RATE); db.execSQL("DROP TABLE IF EXISTS " + TABLE_ASURANSI_RATE); db.execSQL("DROP TABLE IF EXISTS " + TABLE_ER_LINKER); db.execSQL("DROP TABLE IF EXISTS " + TABLE_AS_LINKER); db.execSQL("DROP TABLE IF EXISTS " + TABLE_AS_L_ZONA); onCreate(db); } public int updateEntryEffectiveRate(EntryEffectiveRate er) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(KEY_ER_ID, er.getERId()); values.put(KEY_ER_TENOR, er.getERTenor()); values.put(KEY_ER_RATE, er.getERrate()); values.put(KEY_ER_RATE_DB, er.getERrateDB()); // updating row return db.update(TABLE_EFFECTIVE_RATE, values, KEY_ER_ID + " = ?", new String[] { String.valueOf(er.getERId()) }); } // public void deleteEntryEffectiveRate(long er_id) { SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_EFFECTIVE_RATE, KEY_ER_ID + " = ?", new String[] { String.valueOf(er_id) }); } public void saveEntryEffectiveRate(int id, int tenor,String ko,String co, double rate, double ratedb) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues valuesER = new ContentValues(); valuesER.put(KEY_ER_ID, id); valuesER.put(KEY_ER_TENOR, tenor); valuesER.put(KEY_ER_KO, ko); valuesER.put(KEY_ER_CO, co); valuesER.put(KEY_ER_RATE, rate); valuesER.put(KEY_ER_RATE_DB, ratedb); db.insert(TABLE_EFFECTIVE_RATE, null, valuesER); } public void saveEntryAsuransiRate(int ASid,int ASzo,int AStenor,double tlo,double comp,double comb) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues valuesAS = new ContentValues(); valuesAS.put(KEY_AS_ID, ASid); valuesAS.put(KEY_AS_ZO, ASzo); valuesAS.put(KEY_AS_TENOR, AStenor); valuesAS.put(KEY_AS_TLO, tlo); valuesAS.put(KEY_AS_COMPREHENSIVE, comp); valuesAS.put(KEY_AS_COMBINE, comb); db.insert(TABLE_ASURANSI_RATE, null, valuesAS); } public void saveKondisi(String K,String C) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues valuesK = new ContentValues(); valuesK.put(KEY_ER_L_K,K ); valuesK.put(KEY_ER_L_C, C); db.insert(TABLE_ER_LINKER, null, valuesK); } public void saveTipeAsuransi(String ty) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues valuesTA = new ContentValues(); valuesTA.put(KEY_AS_L_Ty, ty); db.insert(TABLE_AS_LINKER, null, valuesTA); } public void saveZona(String za,String ze) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues valuesZO = new ContentValues(); valuesZO.put(KEY_AS_L_Z_ZONA, za); valuesZO.put(KEY_AS_L_Z_ZONE, ze); db.insert(TABLE_AS_L_ZONA, null, valuesZO); } // public void deleteEntryAsuransiRate(long as_id) { SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_ASURANSI_RATE, KEY_AS_ID + " = ?", new String[] { String.valueOf(as_id) }); } 

I declarar la base de datos dentro de la mainclass que va a hacer el análisis y el almacenamiento con DatabaseMaster2 db; Maestro de base de datos es el nombre de la clase de base de datos que se extiende sqliteopenhelper

Puse el registro para cerciorarse de que el analizar se ha hecho con éxito. Y es. ¿Alguna sugerencia sobre el almacenamiento de datos en una base de datos?

Primero abra su base de datos por getwritable () …. y pruebe este código

 JSONObject json_give_field_1 = jsonArray_items.getJSONObject(0); for (int i = 0; i < jsonArray_items.length(); i++) { JSONObject fields_value; try { cv.put("databasefield", fields_value.getString(field)); db.insert(database_table, null, cv); } catch (JSONException e) { e.printStackTrace(); } } 

Después de eso, debe cerrar la base de datos por db.close (); Espero que funcione para ti

En lugar de usar Json Parser, pruebe la biblioteca de Gson para convertir de Json a String y viceversa. Para un ejemplo completo, vea esta respuesta .

Cree una clase con toda la información que necesita y luego serializarla con Gson.

  • SQLCipher para Android getReadableDatabase () Sobrehéroe
  • Longitud máxima de Android Sqlite String?
  • Consulta SQLite de Android donde columna no es nula y no vacía
  • ¿Cómo puedo recuperar datos de la base de datos con el cursor? (Android, SQLite)
  • Android abrir o crear base de datos
  • ¿Cómo obtener el recuento de filas de una consulta en Android usando SQLite?
  • ¿Por qué fue InsertHelper obsoleta?
  • Sugar ORM lanza excepción NoSuchTable en lollipop
  • ¿Cuándo se ejecuta SQLiteOpenHelper onCreate () / onUpgrade ()?
  • Pasar los datos a otro fragmento de vista de desplazamiento con la pestaña de estudio de Android, no botón
  • Android: sqlite: cursor: getColumnIndex
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.