2015-04-23 4 views
4

Я делаю приложение, которое есть базы данных, и теперь я пытаюсь сохранить данные с помощью этого метода и получение javanullpointer ошибки,Android JSON синтаксического анализа и хранения в базе данных

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

, а затем я попробовать другой метод (это также дают ту же ошибку)

  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 в базе:

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

ОБНОВЛЕНИЕ: 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 

ОБНОВЛЕНИЕ: 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) }); 
    } 

я объявить базу данных внутри MainClass которая делает синтаксический анализ и хранение с DatabaseMaster2 db; мастер базы данных является имя класса базы данных, которая простирается sqliteopenhelper

Я поставил журнал, чтобы убедиться, что синтаксический анализ успешно выполнен. И это. Любое предложение о хранении данных в базе данных?

+0

отправить свой logcat – Prachi

+0

где инициализируется 'db'? –

+0

@ ρяσѕρєяK в классе, который расширяет активность и внутри этого класса, я пытаюсь использовать методы –

ответ

1

Вместо использования Json Parser попробуйте библиотеку Gson для преобразования из Json в String и наоборот. Подробный пример см. В этом answer.

Создайте класс со всей необходимой информацией, а затем сериализуйте его с помощью Gson.

3

первым открыть базу данных по getwritable() .... и попробовать этот код

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

    } 

после затем должен закрыть вам базу данных db.close(); надеюсь, что это сработает для вас

+0

cv is contentvalue .. –

+0

Мне нужно поместить двойные кавычки только в поле базы данных, либо в таблицу базы данных и поле, либо без кавычек? или вызов его через класс базы данных, например database.database_column_name, database.table_name? –

+0

Да, предположим, что его поле id помещает «id» в двойные кавычки –

Смежные вопросы