2011-06-19 10 views
0

最近、アンドロイドの開発を開始し、データベースからデータを保存/読み込む際に問題が発生しました。データベースクラスをhereから少し変更しました。android sqlite problem

私の問題は、いくつかのedittextでアクティビティがあることです。 onCreateでは、データベースからの文字列をedittextに書き込む必要があります。ボタンを押すと、データベースのデータを更新して、アクティビティを閉じます。データベースが空の場合は、データベースを読み込むためにcursor.getCount!= 0を指定してif節を追加しましたが、この条件は真になりません。

は、ここに私のコード

package com.gabrielisonline.timetable; 

public class DurationActivity extends Activity { 

DbAdapter dba; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.duration); 

    Button saveButton = (Button) findViewById(R.id.duration_button1); 
    saveButton.setOnClickListener(new SaveButtonListener()); 

    dba = new DbAdapter(this); 
    dba.open(); 
    Cursor c = dba.fetchAllDurations(); 

    if (c.getCount() != 0) { 
     int i = c.getColumnIndex(DbAdapter.KEY_TIME); 

     ((EditText) findViewById(R.id.duration_length)).setText(dba.fetchDuration(0).getString(i)); 
     ((EditText) findViewById(R.id.duration_lesson1)).setText(dba.fetchDuration(1).getString(i)); 
     ((EditText) findViewById(R.id.duration_lesson2)).setText(dba.fetchDuration(2).getString(i)); 
     ((EditText) findViewById(R.id.duration_lesson3)).setText(dba.fetchDuration(3).getString(i)); 
     ((EditText) findViewById(R.id.duration_lesson4)).setText(dba.fetchDuration(4).getString(i)); 
     ((EditText) findViewById(R.id.duration_lesson5)).setText(dba.fetchDuration(5).getString(i)); 
     ((EditText) findViewById(R.id.duration_lesson6)).setText(dba.fetchDuration(6).getString(i)); 
     ((EditText) findViewById(R.id.duration_lesson7)).setText(dba.fetchDuration(7).getString(i)); 
     ((EditText) findViewById(R.id.duration_lesson8)).setText(dba.fetchDuration(8).getString(i)); 
     ((EditText) findViewById(R.id.duration_lesson9)).setText(dba.fetchDuration(9).getString(i)); 
     ((EditText) findViewById(R.id.duration_lesson10)).setText(dba.fetchDuration(10).getString(i)); 
    } 


} 

public class SaveButtonListener implements OnClickListener { 
    @Override 
    public void onClick(View v) { 

     String l = ((EditText) findViewById(R.id.duration_length)).getText().toString(); 
     String l1 = ((EditText) findViewById(R.id.duration_lesson1)).getText().toString(); 
     String l2 = ((EditText) findViewById(R.id.duration_lesson2)).getText().toString(); 
     String l3 = ((EditText) findViewById(R.id.duration_lesson3)).getText().toString(); 
     String l4 = ((EditText) findViewById(R.id.duration_lesson4)).getText().toString(); 
     String l5 = ((EditText) findViewById(R.id.duration_lesson5)).getText().toString(); 
     String l6 = ((EditText) findViewById(R.id.duration_lesson6)).getText().toString(); 
     String l7 = ((EditText) findViewById(R.id.duration_lesson7)).getText().toString(); 
     String l8 = ((EditText) findViewById(R.id.duration_lesson8)).getText().toString(); 
     String l9 = ((EditText) findViewById(R.id.duration_lesson9)).getText().toString(); 
     String l10 = ((EditText) findViewById(R.id.duration_lesson10)).getText().toString(); 

     dba.updateDuration(0,l); 
     dba.updateDuration(1,l1); 
     dba.updateDuration(2,l2); 
     dba.updateDuration(3,l3); 
     dba.updateDuration(4,l4); 
     dba.updateDuration(5,l5); 
     dba.updateDuration(6,l6); 
     dba.updateDuration(7,l7); 
     dba.updateDuration(8,l8); 
     dba.updateDuration(9,l9); 
     dba.updateDuration(10,l10);    

     dba.close(); 

     finish(); 
    } 
} 
} 
あなたの助けを

感謝です!

EDIT:あなたの答えの人たちのための

感謝。問題は確かに私が実際に何かをデータベースに書き込まなかったことです。 updateDurationを使用する代わりに、onClickメソッドのコードを次のように変更しました。

if (c.getCount() != 0) {   
dba.updateDuration(1,l); 
dba.updateDuration(2,l1); 
dba.updateDuration(3,l2); 
dba.updateDuration(4,l3); 
dba.updateDuration(5,l4); 
dba.updateDuration(6,l5); 
dba.updateDuration(7,l6); 
dba.updateDuration(8,l7); 
dba.updateDuration(9,l8); 
dba.updateDuration(10,l9); 
dba.updateDuration(11,l10); 
} else { 
dba.createDuration(l); 
dba.createDuration(l1); 
dba.createDuration(l2); 
dba.createDuration(l3); 
dba.createDuration(l4); 
dba.createDuration(l5); 
dba.createDuration(l6); 
dba.createDuration(l7); 
dba.createDuration(l8); 
dba.createDuration(l9); 
dba.createDuration(l10); 
} 

すべてが機能しています。私は、updateメソッドがdbへの最初の書き込み(createDurationはDbAdapterのデータベースのcreateメソッドを呼び出し、updateDurationはupdateを呼び出します)でも十分であると考えました。

+0

エラーの詳細を投稿してください。どのようなエラー/例外がありますか?コードのどの行でエラーが発生しますか?そして、あなたはどこのデータベースにデータを書いていますか? –

+0

例外はありません。問題は、データベースが決して読み取られないということです。たとえば、アクティビティを開いたり、edittextに何かを書き込んだり、saveを押してアクティビティを再度開いたりすると、oncreateは保存された文字列をedittextsに書き戻しますが、edittextは空です。私はdba.updateDurationでデータを書きます。あなたが望むなら、私はデータベースコードを掲示することができますが、上記のリンクとほとんど同じですが、私は1つの列を少なくしていくつかの名前を変更したことを除いて言いました。 – androidfan

答えて

0

これまでDBに何か書きましたか?あなたは、そのDBが間違いなくその中にデータを持っていることを知っていますか?もしそうでなければ、http://sqlitebrowser.sourceforge.net/のようなSQLLiteブラウザをインストールし、テーブルを見てください。

これは、問題が表に書き込んだり、読み込んだりすることに役立つはずです。

0

カーソルが値を取得していない場合は、データベースに値が設定されていない可能性があります。また、私はあなたのコードに気づいた1つのエラーは、カーソルにデータベースの値を取得した後、あなたが最初のレコードにカーソルポインタを移動する

c.moveToFirst(); 

を呼び出す必要があるということです。ポインタを移動しない場合は、デフォルトで-1の位置を指しています。それ以降は、c.getString(1)を呼び出して値を取得できます。