2016-04-09 9 views
0

私はAndroidアプリケーションを作成しており、JSiteをSQLiteデータベースに保存する必要があります。 アプリにはすでにJSONを取得し、これをlistviewに表示する機能と、データをデータベースに保存する機能があります。今私はそれらを組み合わせたいが、私は少し失われている。JSiteをSQLiteに保存

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

これはJSONをループするので、これはデータベースに保存する必要があります。

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

これはDBHelper.classにありますが、これは私が思うに使用できるはずです。

私は入力フィールドをデータベースに保存するために使用したコードを再利用したいと考えていましたが、これまでのところ運がありませんでした。

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

誰もが、可能な限り、両方を統合する方法を提案していますか?事前に のthnx

EDIT: logcatのクラッシュレポート:

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

JSONからデータを抽出するときに 'insertCourse'メソッドを呼び出します。 –

+0

@Prera​​kSola私は 'String dbCourse = obj.getString(" name ");を試しました。 int dbects = Integer.parseInt(obj.getString( "ects")); int dbperiod = Integer.parseInt(obj.getString( "period")); int dbgrade = Integer.parseInt(obj.getString( "grade")); dbHelper.insertCourse(dbCourse、dbects、dbperiod、dbgrade); 'が、アクティビティを開くとすぐにアプリケーションがクラッシュします。 –

+0

あなたの質問にクラッシュのlogcatを投稿してください。 –

答えて

1

あなたはinsertCourseメソッドを使用する前に、あなたのDBHelperクラスをインスタンス化する必要があります。

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

また、Modelクラスオブジェクトをデータベースクエリのパラメータとして使用する方が優れています。このようにして

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; 

}

あなたは

db.insert(courses); 
+0

「insertCourse」しかし、今私は "getCourse() 'を解決することはできませんエラー" –

0

としてJSONからのデータを保存することができます例外は、あなたのProgressDBHelperがnullであると言う、あなたはProgressDBHelperのインスタンスを作成していることを確認してください。そのメソッドを呼び出す前に。インスタンスを作成するだけでProgressDBHelper dbHelper = new ProgressDBHelper()が呼び出され、呼び出す前に呼び出す必要がありますdbHelper.insertCourse(...)

関連する問題