2014-11-15 121 views
0

我从服务器JSON URL获取值并存储到本地数据库。我得到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