問題タブ [android-cursor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
17201 参照

android - CursorAdapterで使用するORMLiteを搭載したAndroidカーソル

ORMLite Daoオブジェクトで処理しているクエリのカーソルを取得する方法はありますか?

0 投票する
2 に答える
15820 参照

android - CursorLoaders の利点は何ですか?

私は自分のアプリで広範囲に使用Cursorsして、データベースから情報を読み込んだり、データベースに情報を書き込んだりします。Honeycomb と Compatibility PackageLoaderには、「適切な」方法でデータをロードするのに役立つように設計された新しいクラスがあることがわかりました。

基本的に、これらの新しいクラス (特にCursorLoader) は、以前のデータ管理方法よりもかなり優れていますか? たとえば、CursorLoader過剰管理の利点は何ですか?Cursors

そしてContentProvider、データを処理するために a を使用しますが、これは明らかにかかりますが、これはどのようにメソッドUrisと噛み合うのでしょうか? ローダーを個別に使用するinitLoader()には、それぞれをセットアップする必要がありますか? Fragmentsまた、ID は各ローダーに対してどの程度一意である必要がありますか?それはアプリの範囲を超えているのでしょうか?それとも単なるフラグメントでしょうか? UriCursorLoader に a を渡してデータをクエリする簡単な方法はありますか?

現時点でわかるのは、ローダーがデータをアプリに取り込むために不要な余分なステップを追加することだけです。

0 投票する
1 に答える
1252 参照

android - ListView の CursorAdapter と OnItemClickListener 関連する質問

OnItemClickListenerリストビューにカーソル アダプタを使用する場合の の動作に関連する 2 つの質問をしたいと思います。すなわち:

getCount()ログを追加するために (いつ呼び出されたかを確認するために)、カーソル アダプターをオーバーライドしました。リストの項目をクリックすると、getCount() が 2 回実行されていることに気付きました。なぜこれが起こっているのかよくわかりません..以下はオーバーライドされgetCount()た . mCursor私のアダプターのカーソルオブジェクトです。

次に、このリスナーから別のアクティビティを開始したいと思います。アイテムをクリックすると、次の例外が発生します。

08-26 14:15:20.487: DEBUG/AgendaAdapter(14110): カーソルの数: 14

08-26 14:15:20.525: DEBUG/AgendaAdapter(14110): カーソルの数: 14

08-26 14:15:20.535: DEBUG/AgendaActivity(14110): 位置は: 2

08-26 14:15:20.535: DEBUG/AgendaActivity (14110): ID は: 353

08-26 14:15:20.535: INFO/ActivityManager(104): 開始アクティビティ: 意図 {AgendaEventActivity (エキストラあり) }

08-26 14:15:20.575: DEBUG/AgendaActivity (14110): onPause

08-26 14:15:20.865: INFO/ActivityManager(104): 表示されたアクティビティ AgendaEventActivity: 287 ミリ秒 (合計 287 ミリ秒)

08-26 14:15:20.875: DEBUG/AgendaAdapter(14110): カーソルの数: 14

08-26 14:15:20.875: DEBUG/AgendaAdapter(14110): カーソルの数: 14

08-26 14:15:20.885: DEBUG/AgendaAdapter(14110): カーソルの数: 14

08-26 14:15:20.885: DEBUG/AgendaAdapter(14110): カーソルの数: 14

08-26 14:15:20.885: DEBUG/AndroidRuntime(14110): VM のシャットダウン

08-26 14:15:20.885: WARN/dalvikvm(14110): threadid=1: キャッチされない例外で終了するスレッド (group=0x40028a00) 08-26 14:15:20.905: エラー/AndroidRuntime(14110): 致命的な例外: メイン08-26 14:15:20.905: エラー/AndroidRuntime(14110): java.lang.IllegalStateException: これは、カーソルが有効な場合にのみ呼び出す必要があります

そのためgetCount()、アイテムをクリックすると が実行され、クリックされたアイテムonItemClickListenerの と のpos2つのログが続きidgetCount()再度呼び出されます... 最後に、現在のアクティビティが一時停止され、開始した新しいアクティビティが this を取得しますIllegalStateException。なぜだか理解できない..

カーソルについては、起動時に managedquery() を使用しました。

どんな助けでも本当に感謝しています!お時間をいただきありがとうございます!

例外のスタック トレースは次のとおりです。

08-26 14:35:17.735: エラー/AndroidRuntime(24173): 致命的な例外: メイン

08-26 14:35:17.735: ERROR/AndroidRuntime(24173): java.lang.IllegalStateException: これは、カーソルが有効な場合にのみ呼び出す必要があります 08-26 14:35:17.735: ERROR/AndroidRuntime(24173): Android で.widget.CursorAdapter.getView(CursorAdapter.java:175)

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.widget.AbsListView.obtainView (AbsListView.java:1294) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): android.widget.ListView.makeAndAddView(ListView.java:1727) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.widget.ListView.fillSpecific (ListView.java:1272) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.widget.ListView.layoutChildren (ListView.java:1591) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): android.widget.AbsListView.onLayout(AbsListView.java:1147) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.view.View.layout (View.java:7034) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): android.widget.LinearLayout.onLayout(LinearLayout.java:1042) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.view.View.layout (View.java:7034) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): android.widget.RelativeLayout.onLayout(RelativeLayout.java:909) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.view.View.layout (View.java:7034) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): android.widget.FrameLayout.onLayout(FrameLayout.java:333) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.view.View.layout (View.java:7034) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): android.widget.FrameLayout.onLayout(FrameLayout.java:333) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.view.View.layout (View.java:7034) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.view.ViewRoot.performTraversals (ViewRoot.java:1049) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.view.ViewRoot.handleMessage (ViewRoot.java:1744) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.os.Handler.dispatchMessage (Handler.java:99) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): android.os.Looper.loop(Looper.java:143)

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.app.ActivityThread.main (ActivityThread.java:4914) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): java.lang.reflect.Method.invoke(Method.java:521) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:868) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): com.android.internal.os.ZygoteInit.main (ZygoteInit.java:626) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): dalvik.system.NativeStart.main (ネイティブ メソッド) で

そして、これは getCount() からの dumpStack です:

08-26 14:35:17.615: WARN/System.err(24173): java.lang.Throwable: スタック ダンプ

08-26 14:35:17.695: DEBUG/dalvikvm(24173): GC_FOR_MALLOC が 19264 個のオブジェクトを解放/78ms で 1052704 バイト

08-26 14:35:17.695: WARN/System.err(24173): java.lang.Thread.dumpStack (Thread.java:618) で

08-26 14:35:17.705: WARN/System.err(24173): AgendaAdapter.getCount (AgendaAdapter.java:31) で

08-26 14:35:17.705: WARN/System.err(24173): android.widget.ListView.layoutChildren (ListView.java:1491) で

08-26 14:35:17.705: WARN/System.err(24173): android.widget.AbsListView.onLayout(AbsListView.java:1147) で

08-26 14:35:17.705: WARN/System.err(24173): android.view.View.layout (View.java:7034) で

08-26 14:35:17.705: WARN/System.err(24173): android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249) で

08-26 14:35:17.705: WARN/System.err(24173): android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125) で

08-26 14:35:17.705: WARN/System.err(24173): android.widget.LinearLayout.onLayout(LinearLayout.java:1042) で

08-26 14:35:17.705: WARN/System.err(24173): android.view.View.layout (View.java:7034) で

08-26 14:35:17.705: WARN/System.err(24173): android.widget.RelativeLayout.onLayout(RelativeLayout.java:909) で

08-26 14:35:17.705: WARN/System.err(24173): android.view.View.layout (View.java:7034) で

08-26 14:35:17.715: WARN/System.err(24173): android.widget.FrameLayout.onLayout(FrameLayout.java:333) で

08-26 14:35:17.715: WARN/System.err(24173): android.view.View.layout (View.java:7034) で

08-26 14:35:17.715: WARN/System.err(24173): android.widget.FrameLayout.onLayout(FrameLayout.java:333) で

08-26 14:35:17.715: WARN/System.err(24173): android.view.View.layout (View.java:7034) で

08-26 14:35:17.715: WARN/System.err(24173): android.view.ViewRoot.performTraversals (ViewRoot.java:1049) で

08-26 14:35:17.715: WARN/System.err(24173): android.view.ViewRoot.handleMessage(ViewRoot.java:1744) で

08-26 14:35:17.715: WARN/System.err(24173): android.os.Handler.dispatchMessage (Handler.java:99) で

08-26 14:35:17.715: WARN/System.err(24173): android.os.Looper.loop(Looper.java:143)

08-26 14:35:17.715: WARN/System.err(24173): android.app.ActivityThread.main (ActivityThread.java:4914) で

08-26 14:35:17.715: WARN/System.err(24173): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) で

08-26 14:35:17.715: WARN/System.err(24173): java.lang.reflect.Method.invoke (Method.java:521) で

08-26 14:35:17.715: 警告/System.err(24173): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) で

08-26 14:35:17.715: 警告/System.err(24173): com.android.internal.os.ZygoteInit.main (ZygoteInit.java:626) で

08-26 14:35:17.715: WARN/System.err(24173): dalvik.system.NativeStart.main (ネイティブ メソッド) で

したがって、 から呼び出されますが、アクティビティのListView後にどのように呼び出すことができますか?onPause()

0 投票する
2 に答える
1804 参照

android - 新しいローダー API を使用するときに ListView の位置を維持するにはどうすればよいですか?

Honeycomb では、バックグラウンド スレッドで面倒な作業を行うことでアプリケーションにデータを提供する適切な方法として、ローダーAPI が導入されました。私のアプリケーションでは、すべてのCursors をLoaders を返すCursors に置き換える作業を行っています。は現在減価償却されているため、 を呼び出してバックグラウンド スレッドで作業を再度実行できるようにし、それが に戻ったときに実行するCursor.requery()ことをお勧めします。restartLoaderchangeCursoronLoadFinished

Cursor.requery()これはすべて、更新されたデータを持つ同じ Cursor インスタンスであったため、これを使用してデータを再クエリしたいときに ListView がスクロール位置を維持しないことを除いて、うまく機能します。

スクロール位置を失わずにローダーを更新するにはどうすればよいですか?

0 投票する
6 に答える
55232 参照

java - SQLiteDatabase クエリでカーソルが空かどうかをテストする方法

次のコードで作成された SQL テーブルがあります。

次のようにテーブルをクエリします。

問題は、カーソルが空の場合 (テーブルに値が格納されていない場合) はアクティビティ A を開始し、カーソルが空でない場合 (テーブルがいっぱいである場合) はアクティビティ B を開始する必要があることです。

テーブルが空かどうかを教えてくれるメソッドが見つかりません。次のようにログを使用しようとしました:

しかし、ログは、テーブルが空の場合は 1 を示し、テーブルにエントリが 1 つある場合は 1 を示し、テーブルにエントリが 2 つある場合は 2 を示します。

カーソルが空かどうかに基づいてさまざまなアクティビティを開始するという私の問題を解決する方法を提案できますか。

0 投票する
3 に答える
4935 参照

android - Android - カーソル例外 - サイズ 1 でリクエストされたインデックス 1

次のコードがあります。

getVEvents を呼び出すと、次の例外が発生します。

177行目は

クエリ メソッドと getVEvents の両方で、カーソルが null かどうかを常にチェックしており、moveToFirst() と moveToNext() を使用しているため、例外が発生する理由と、正確に "index 1 が要求したもの" が何であるかがよくわかりません。サイズが 1 インチというのは、実際には意味します。

どうもありがとう!

0 投票する
0 に答える
292 参照

android - 共通の列を持ち、共通の行を持たない複数のテーブルをクエリするにはどうすればよいですか?

列数が異なる 2 つのテーブルがあります。両方のテーブルには、true/false を含む列 "inRoster" があります。私が望むのは、inRoster = true で両方のテーブルのすべての行を返すクエリです。2 つのテーブル間に共通の行はありません。2 つのテーブル間で列が異なるため、Union は機能しません。これは可能ですか?

0 投票する
2 に答える
75 参照

android - noob: アンドロイドボタン

ボタン b1 と b2 の 2 つのボタンがあります。ボタン b1 が押された場合はクエリ q1 を実行し、ボタン b2 が押された場合は別のクエリ q2 を実行します。

これを実装する方法を教えてください.b1_clickメソッドまたはボタンが押されたことを伝える組み込みメソッドを実装する方法.私は試しました

カーソル (c) が最終的なヘルプになるべきだと言っていますか?

0 投票する
1 に答える
4816 参照

android - Android の SQLite データベース カーソルに関するいくつかの質問

アプリケーションにデータベース アクセスを実装するために、Lars Vogel のチュートリアルに従いましたが、いくつかの点で非常に混乱しています...

  1. 呼び出しが行われるたびにfetchTodo、新しいカーソルが作成されて返されます。ガベージ コレクターの前のカーソルを残します。それで、私が使用しない場合startManagingCursor、またはそのことについては、カーソルでCursorLoadera を呼び出す必要がありますか?.close()もちろん範囲外fetchTodo、例:

    カーソル cursor = mNotesAdapter.fetchTodo(); // 何かをする... cursor.close();

私はこのカーソルを使い果たし、次のフェッチで新しいカーソルが作成されます。このように閉じる必要がありますか、それともガベージ コレクターに残す必要がありますか? 私はまったく異なる2つのことについて話していると思いますが... ポイントは、上記の例のように閉じる必要がありますか?

  1. Cursorメソッドも.deactivate()あり、ドキュメントには、(アクティブカーソルよりも)使用するリソースが少ないと書かれています。いつこれを使用する必要がありますか?たとえば、私のアプリでは、ListActivityを介して入力される がありSimpleCursorAdapterます (このコードの初期化は 1 回だけ呼び出されます)。使用されているカーソルはクラス メンバー変数です。これは、リストにデータを入力するメソッドの外でカーソルが必要だからです。データベースから何かが削除されたときにデータベースを再クエリするために必要です。しかし、レコードが削除されるまで、これはユーザー アクションであり、発生するまでに時間がかかる場合があります。その間、カーソルを無効にする必要がありますか? もう一度呼び出すと、.requery()再びアクティブになるからです。または、SimpleCursorAdapterカーソルがアクティブでないために動作を停止しますか?

編集:deactivate()これをテストしたところ、カーソルアダプターをセットアップした後に呼び出すことができないことがわかりました。カーソルがアクティブでない場合、リストは空になるため、ListActivity が表示されている限り、カーソルをアクティブにしておく必要があります。結局、それをStartManagingCursor処理するだけです。または新しいCursorLoader

  1. startManagingCursor/が非推奨であることはわかっていstopManagingCursorますが、(少なくとも当面は) Honeycomb をターゲットにしておらずCursorLoader、今のところ新しいものを扱いたくありません。しかし、上記のチュートリアルでstartManagingCursorは、どこでも使用されていますが、stopManagingCursor一度も呼び出されていません。なぜだめですか?Androidは独自の方法でそれを処理しますか? 私が電話すべき状況はありますstopManagingCursorか?
0 投票する
1 に答える
2989 参照

android - Android:onclick後にデータベースのリストビューデータを表示する

次のようなデータベースがあります:テーブルpepak、テーブルカテゴリ、テーブルサブカテゴリpepak.nameのいずれかをクリックするとカテゴリを表示したいのですが、pepak.nameのいずれかをクリックすると、アプリでエラーが発生して停止しました。

これが私のコードです:

Menu.java

}

PepakCats.java

クリック後にデータベースのリストビューデータを表示するにはどうすればよいですか?