2016-04-09 15 views
0

SQLite için. uygulama zaten JSON almak ve bir liste görünümü ve bir veritabanına verileri kaydetmek üzere bir fonksiyon bu gösterilecek bir işlevi vardır. Şimdi bunları birleştirmek istiyorum, ama biraz kayboldum.kaydet JSON ben bir android uygulama yapma ve bir SQLite veritabanına JSON kurtarmak zorunda am

public void get_data(String data) { 
    try { 
     JSONArray data_array=new JSONArray(data); 

     for (int i = 0 ; i < data_array.length() ; i++) 
     { 
      JSONObject obj=new JSONObject(data_array.get(i).toString()); 

      Courses add=new Courses(); 
      add.name = obj.getString("name"); 
      add.ects = obj.getString("ects"); 
      add.grade = obj.getString("grade"); 
      add.period = obj.getString("period"); 

      courses.add(add); 



     } 
     adapter.notifyDataSetChanged(); 

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

Bu JSON üzerinden döngüler alır, bu yüzden veritabanına nerede kaydedileceğini düşünüyorum.

public boolean insertCourse(String course, int ects, int period, int grade) { 
    SQLiteDatabase db = getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 

    contentValues.put(COURSE_COLUMN_COURSE, course); 
    contentValues.put(COURSE_COLUMN_ECTS, ects); 
    contentValues.put(COURSE_COLUMN_PERIOD, period); 
    contentValues.put(COURSE_COLUMN_GRADE, grade); 

    db.insert(COURSE_TABLE_NAME, null, contentValues); 
    return true; 
} 

Bu DBHelper.class içinde olduğunu düşünüyorum bunu kullanabileceğini düşünüyorum.

Ben veritabanında ama şimdiye kadar hiçbir şans giriş alanlarını kurtarmak için kullanılan kod yeniden umuyordum.
else { 
     if(dbHelper.insertCourse(courseEditText.getText().toString(), 
       Integer.parseInt(ectsEditText.getText().toString()), 
       Integer.parseInt(periodEditText.getText().toString()), 
       Integer.parseInt(gradeEditText.getText().toString()))) { 
      Toast.makeText(getApplicationContext(), "Course Inserted", Toast.LENGTH_SHORT).show(); 
     } 
     else{ 
      Toast.makeText(getApplicationContext(), "Could not Insert course", Toast.LENGTH_SHORT).show(); 
     } 

kimse hem (mümkünse hiç) nasıl entegre bir öneri var mı. peşin

DÜZENLEME içinde Thnx: logcat kazasında raporu: insertCourse Yöntem kullanmadan önce DBHelper sınıf örneğini gerekir

04-09 17:45:37.204 12244-12244/com.stefspakman.progress2 E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.stefspakman.progress2, PID: 12244 
                     java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.stefspakman.progress2.ProgressDBHelper.insertCourse(java.lang.String, int, int, int)' on a null object reference 
                      at com.stefspakman.progress2.gradingActivity.get_data(gradingActivity.java:60) 
                      at com.stefspakman.progress2.Download_data$1.handleMessage(Download_data.java:58) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:148) 
                      at android.app.ActivityThread.main(ActivityThread.java:5422) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
+0

Çağrı 'insertCourse' yöntemi çağırmadan önce aramak zorunda. –

+0

@PrerakSola Az önce denedim dbCourse = obj.getString ("name"); int dbects = Integer.parseInt (obj.getString ("Ects")); int dbperiod = Integer.parseInt (obj.getString ("süresi")); int dbgrade = Integer.parseInt (obj.getString ("notu")); dbHelper.insertCourse (dbCourse, dbects, dbperiod, dbgrade); ', ancak etkinliği açtığımda uygulama çöküyor. –

+0

Sorunuzdaki kilitlenme günlüğünü kaydedin. –

cevap

1

. Eğer veritabanı sorguları için paramater olarak sizin Modeli sınıf nesnesi kullanabilirsiniz Ayrıca

DBHelper helper = new DBHelper(this); 
helper.insertCourse(Course course); 

, onun daha iyi.

public boolean insertCourse(Courses courses) { 
SQLiteDatabase db = getWritableDatabase(); 
ContentValues contentValues = new ContentValues(); 

contentValues.put(COURSE_COLUMN_COURSE, courses.getCourse()); 
contentValues.put(COURSE_COLUMN_ECTS, courses.getEcts()); 
contentValues.put(COURSE_COLUMN_PERIOD, courses.getPeriod()); 
contentValues.put(COURSE_COLUMN_GRADE, courses.getGrade()); 

db.insert(COURSE_TABLE_NAME, null, contentValues); 
return true; 

} Eğer istisna ProgressDBHelper boş senin, sen ProgressDBHelper bir örneğini oluştururken emin olun diyor

db.insert(courses); 
+0

'insertCourse' değiştirdim ama şimdi "getCourse()" hatası çözülemez "hatası alıyorum –

0

olarak JSON verilerinizi kurtarabilir Bu şekilde

yöntemlerini çağırmadan önce. bir örneğini oluşturma sadece ProgressDBHelper dbHelper = new ProgressDBHelper() arayarak ve size JSON veri ayıklamak zaman dbHelper.insertCourse(...)

İlgili konular