0

この問題の解決策を得るために、私は今何時間も探しています:

私のAndroidアプリの最初に、ボタンのあるレイアウトがユーザーに表示されます。[タスク]ボタンをクリックすると、listViewがポップアップ表示され(別のアクティビティとレイアウト)、使用可能なすべてのタスクが表示されます。1つをクリックすると、さらに多くのことができますが、私の問題には必要ありません。重要なのは、アプリはデータベースからデータを取得しませんが、すべてのDBStuffのメソッドを呼び出す行にステップインまたはステップオーバーすると、アプリは機能します。必要な行は次のとおりです。

 if (connection1.OpenDatabase(1, getDataBaseName()))
        {
            CTask = connection1.DBQueryTable(getDataBaseName(), "Tasks", TempFieldT);
            CEquipment = connection1.DBQueryTable(getDataBaseName(), "Equipment", TempFieldE);
            connection1.CloseDatabase();
        }

したがって、彼はそれらの行を実行し、その下の行を実行しますが、ブレークポイントとステップでデータを監視していない場合は、データを返しません。私がそれをするとき、すべてのものは彼らがすべきように働きます。

この場所でアプリが実行するデータベーススタッフ。

public Android.Database.ICursor DBQueryTable(string DataBaseName, string TableName, string[] Fields)
    {
        FindDBPath(DataBaseName);
        Android.Database.ICursor c;
        string TempF = "";
        string str = "";
        foreach (string n in Fields)
        { TempF += n + ","; }
        SQLQuery = "SELECT " + (str = TempF.TrimEnd(',')) +" FROM " + TableName;
        c = sqldTemp.RawQuery(SQLQuery, null);
        return c;        
    }

では、なぜアプリ/コンパイラ/デバッガはこのように動作するのですか?私がした間違いはありますが、今はわかりませんか?

追伸:ええ、クエリ関数があることは知っていますが、それが私の問題の解決策を提供する限り、ここでは必要ありません。

4

1 に答える 1

0

メソッドはカーソルDBQueryTableを返します。次の行で接続を閉じるとすぐに無効になります。

connection1.CloseDatabase();

カーソルが必要な限り、接続を開いたままにしておく必要があります。たとえば、カーソルからすべてのデータをフェッチしてから、接続閉じることができます。

于 2012-11-30T14:46:55.860 に答える