2014-11-15 3 views
0

서버 JSON에서 값을 가져 와서 로컬 데이터베이스에 저장하고 있습니다. JSON 배열을 얻고 있는데 내가 logcat 메시지에서 이것을 보았지만 로컬 데이터베이스에 값을 저장하는 데 오류가 발생했습니다.값이 로컬 데이터베이스에 삽입되지 않습니다

public class DataBaseHandler extends SQLiteOpenHelper { 

    public DataBaseHandler(Context context, String name, CursorFactory factory, 
      int version) { 

     // TODO Auto-generated constructor stub 

      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
      context = this.context; 
    } 

    Context context ; 

     // All Static variables 
     // Database Version 
     private static final int DATABASE_VERSION = 1; 

     // Database Name 
     private static final String DATABASE_NAME = "BeaconDetails"; 

     // Contacts table name 
     //table 1 
     private static final String TABLE_BEACON = "beacon_details"; 

     // Contacts Table Columns names 

     //table 1 
     private static final String KEY_UUID = "uuid"; 
     private static final String KEY_NAME = "name"; 
     private static final String KEY_NOTIFICATION = "notification"; 
     private static final String KEY_TYPE = "type"; 
     private static final String KEY_MAJOR_ID = "major"; 
     private static final String KEY_MINOR_ID = "minor"; 


    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 


     String CREATE_TABLE_BEACON = "CREATE TABLE " + TABLE_BEACON + "(" 
       + KEY_NAME + " TEXT,"+ KEY_UUID + " INTEGER PRIMARY KEY,"+ KEY_MAJOR_ID + " INTEGER PRIMARY KEY,"+ KEY_MINOR_ID + " INTEGER PRIMARY KEY"+ KEY_NOTIFICATION + " TEXT,"+ KEY_TYPE + " TEXT)"; 
     db.execSQL(CREATE_TABLE_BEACON); 

    } 

    // Upgrading database 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // Drop older table if existed 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_BEACON); 

     // Create tables again 
     onCreate(db); 

    } 

    public long insertBeaconDetails(BeaconDetails beacondetailstore) 
    { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 

     values.put(KEY_NAME,beacondetailstore.name); 
     values.put(KEY_UUID,beacondetailstore.uuid); 
     values.put(KEY_MAJOR_ID,beacondetailstore.major); 
     values.put(KEY_MINOR_ID,beacondetailstore.minor); 
     values.put(KEY_NOTIFICATION,beacondetailstore.notification); 
     values.put(KEY_TYPE,beacondetailstore.type);  


     long rowId = db.replace(TABLE_BEACON, null, values); 
     db.close(); 
     return rowId; 
    } 

MainActivity.java :

@Override 
    protected Void doInBackground(Void... voids) { 
     try { 
      String jsonString = getJsonString(); 
      Log.v(TAG, "json: " + jsonString); 

      JSONArray jsonRegions = new JSONArray(jsonString); 
      for (int i = 0; i < jsonRegions.length(); i++) { 
       JSONObject jsonRegion = jsonRegions.getJSONObject(i); 

       beacondetailstore = new BeaconDetails(); 

       beacondetailstore.name = jsonRegion.getString("name"); 
       beacondetailstore.uuid = jsonRegion.getString("uuid"); 
       beacondetailstore.major = jsonRegion.getInt("major_id"); 
       beacondetailstore.minor = jsonRegion.getInt("minor_id");    
       beacondetailstore.notification=jsonRegion.getString("notification"); 
       beacondetailstore.type = jsonRegion.getString("type"); 

       db.insertBeaconDetails(beacondetailstore); 


      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 

      Log.d("myTag", e.getMessage()); 
     } 

로그 값 :

11-15 11:11:02.280: E/AndroidRuntime(15702): FATAL EXCEPTION: AsyncTask #1 
11-15 11:11:02.280: E/AndroidRuntime(15702): java.lang.RuntimeException: An error occured while executing doInBackground() 
11-15 11:11:02.280: E/AndroidRuntime(15702): at android.os.AsyncTask$3.done(AsyncTask.java:299) 
11-15 11:11:02.280: E/AndroidRuntime(15702): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
11-15 11:11:02.280: E/AndroidRuntime(15702): at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
11-15 11:11:02.280: E/AndroidRuntime(15702): at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
11-15 11:11:02.280: E/AndroidRuntime(15702): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
11-15 11:11:02.280: E/AndroidRuntime(15702): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
11-15 11:11:02.280: E/AndroidRuntime(15702): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
11-15 11:11:02.280: E/AndroidRuntime(15702): at java.lang.Thread.run(Thread.java:841) 
11-15 11:11:02.280: E/AndroidRuntime(15702): Caused by: java.lang.NullPointerException 
11-15 11:11:02.280: E/AndroidRuntime(15702): at com.estimote.examples.demos.NotifyDemoActivity$JsonTask.doInBackground(NotifyDemoActivity.java:141) 
11-15 11:11:02.280: E/AndroidRuntime(15702): at com.estimote.examples.demos.NotifyDemoActivity$JsonTask.doInBackground(NotifyDemoActivity.java:1) 
11-15 11:11:02.280: E/AndroidRuntime(15702): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
11-15 11:11:02.280: E/AndroidRuntime(15702): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
11-15 11:11:02.280: E/AndroidRuntime(15702): ... 4 more 

140th 라인 db.insertBeaconDetails(beacondetailstore);

+0

null을 디버깅 했습니까? db의 초기화는 어디에 있습니까? –

답변

0

입니다 두 가지 옵션 및 오류에 대한 대체 솔루션이 있습니다.

1) 문제가 귀하의 잘못된 Context입니다.

2) db 클래스를 초기화하지 않았습니다. 따라서 onCreate() 메서드에서 초기화해야합니다.

db = new DataBaseHandler(this, "BeaconDetails", null, 1) 
+0

예 .. 고마워, 잘하고있어. – karthees

+0

@karthees 너와 함께있어. 다행 당신을 도울 !! – Piyush

관련 문제