0

私は終日戦ってきた「ファイナライズ」エラーを修正しようとしています。この問題は、さまざまなデータベースとカーソルの '.close()' メソッドを試した後も解決しません。

示されているコードは、現在の状態です。カーソルとデータベースを正しい方法で閉じる方法を誰かが教えてくれたら素晴らしいと思います。現在、一方を閉じると、もう一方と競合しているようです!

現時点では、ダイアログ リストのインテントから呼び出される「AddAppointmentContact」クラスの「onCreate」メソッド内に設定されたオブジェクト メソッドから取得した文字列値を使用して「EditText」を設定しようとしています。

現在、次のエラーが発生しています。

エラー:

02-01 21:23:18.947: E/Cursor(274): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/com.example.flybase2/databases/persons_name, table = contactsTable, query = SELECT _id, persons_name, persons_telephone, persons_email, persons_comments FROM contactsTable WHER

コード内の他の場所で同様のコードを実行すると、これは正常に機能します。

これは、ダイアログを保持するリストビューから選択した名前の ID にバンドルされたコードです。

else if (items[item].equals("Add Appointment")) {

Intent conAdd = new Intent("com.example.flybase2.AddAppointmentContact");
conAdd.putExtra("newpassedID", idToPass);
startActivity(conAdd);

そして、開いている「AddAppointmentContact」クラス:

Bundle extras = getIntent().getExtras(); 
    sentID = extras.getLong("newPassedID"); 


    DBHandlerApp NameAppointPass = new DBHandlerApp(this, null, null);

    NameAppointPass.open();
    String nameReturned = NameAppointPass.getName(sentID);

    setName = (EditText) findViewById(R.id.inputAppName);
    setName.setText(nameReturned);

そして '.getName()' メソッド:

public String getName(long passedID) {

String [] columns = new String[]{KEY_ROWAPPID, KEY_NAMEAPP,   KEY_TYPEAPP, KEY_TIMEAPP, KEY_DATEAPP, KEY_COMMENTAPP};
        Cursor c = ourDatabase.query(DATABASE_TABLEAPP, columns, KEY_ROWAPPID + "=" + passedID, null, null, null, null);

        if(c != null && c.getCount() > 0)
        {
        c.moveToFirst();
        String name = c.getString(1);

        return name;
        }

        return null;
4

2 に答える 2

0

カーソルを閉じる必要があります。

c.close()名前またはnullを返す前。

于 2013-02-01T21:43:51.973 に答える
0

また、を閉じる必要があることに同意しますCursor。これを試して:

    if(c != null) {
        if(c.getCount() > 0 && c.moveToFirst())
        {
            String name = c.getString(1);
            c.close();
            return name;
        }
        c.close();
    }
    return null;
于 2013-02-01T22:47:55.903 に答える