0

なぜこれが起こっているのかわかりませんが、アクティビティに戻ると、アプリで「閉じられたカーソルへのアクセス」エラーが発生します。

エラーの原因となっているコードは次のとおりです。

public class TickClass extends TimerTask
{
    private int columnIndex;

    @Override
    public void run() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (_index == 1) {
                    columnIndex = cursor.getColumnIndex(MySQLiteHelper.COLUMN_IMAGE_2);
                    _index = 2;
                }
                else {
                    columnIndex = cursor.getColumnIndex(MySQLiteHelper.COLUMN_IMAGE_1);
                    _index = 1; 
                }   

                String image_1 = cursor.getString(columnIndex);
                image_1 = image_1.replace(".png", "");
                int resourceId = getResources().getIdentifier(getPackageName() + ":drawable/" + image_1, null, null);
                image_1_view.setImageDrawable(getResources().getDrawable(resourceId));
            }
        });
    }
}

より具体的には、String image_1 = cursor.getString(columnIndex);行はEclipseがそれを引き起こしていると言っているものです.

これで、アクティビティが終了したときに 3 つのカーソルを閉じるために使用する次のコードができました。

@Override
protected void onPause() {
    cursor.close();
    cursorCurrent.close();
    cursorPrevious.close();
    datasource.close();
    super.onPause();
}

@Override
public void onDestroy() {
    cursor.close();
    cursorCurrent.close();
    cursorPrevious.close();
    datasource.close();
    super.onDestroy();
}

これは正しいです?私はそれを正しくしていませんか?どんな助けでも素晴らしいでしょう。

4

1 に答える 1

3

でカーソルを閉じると、onPause()その後使用できなくなります。それらを再度使用するには、新しいカーソルを作成する必要があります。

より良いアプローチは、アクティビティのメソッドによって返されるCursorLoaderとともにa を使用することです。これを行う方法の詳細については、ドキュメントを参照するか、このチュートリアルをご覧ください。LoaderManagergetLoaderManager()

于 2013-05-29T18:07:59.580 に答える