問題タブ [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.
android - CursorAdapterで使用するORMLiteを搭載したAndroidカーソル
ORMLite Daoオブジェクトで処理しているクエリのカーソルを取得する方法はありますか?
android - CursorLoaders の利点は何ですか?
私は自分のアプリで広範囲に使用Cursors
して、データベースから情報を読み込んだり、データベースに情報を書き込んだりします。Honeycomb と Compatibility PackageLoader
には、「適切な」方法でデータをロードするのに役立つように設計された新しいクラスがあることがわかりました。
基本的に、これらの新しいクラス (特にCursorLoader
) は、以前のデータ管理方法よりもかなり優れていますか? たとえば、CursorLoader
過剰管理の利点は何ですか?Cursors
そしてContentProvider
、データを処理するために a を使用しますが、これは明らかにかかりますが、これはどのようにメソッドUris
と噛み合うのでしょうか? ローダーを個別に使用するinitLoader()
には、それぞれをセットアップする必要がありますか? Fragments
また、ID は各ローダーに対してどの程度一意である必要がありますか?それはアプリの範囲を超えているのでしょうか?それとも単なるフラグメントでしょうか? Uri
CursorLoader に a を渡してデータをクエリする簡単な方法はありますか?
現時点でわかるのは、ローダーがデータをアプリに取り込むために不要な余分なステップを追加することだけです。
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
の と のpos
2つのログが続きid
、getCount()
再度呼び出されます... 最後に、現在のアクティビティが一時停止され、開始した新しいアクティビティが 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()
android - 新しいローダー API を使用するときに ListView の位置を維持するにはどうすればよいですか?
Honeycomb では、バックグラウンド スレッドで面倒な作業を行うことでアプリケーションにデータを提供する適切な方法として、ローダーAPI が導入されました。私のアプリケーションでは、すべてのCursor
s をLoader
s を返すCursor
s に置き換える作業を行っています。は現在減価償却されているため、 を呼び出してバックグラウンド スレッドで作業を再度実行できるようにし、それが に戻ったときに実行するCursor.requery()
ことをお勧めします。restartLoader
changeCursor
onLoadFinished
Cursor.requery()
これはすべて、更新されたデータを持つ同じ Cursor インスタンスであったため、これを使用してデータを再クエリしたいときに ListView がスクロール位置を維持しないことを除いて、うまく機能します。
スクロール位置を失わずにローダーを更新するにはどうすればよいですか?
java - SQLiteDatabase クエリでカーソルが空かどうかをテストする方法
次のコードで作成された SQL テーブルがあります。
次のようにテーブルをクエリします。
問題は、カーソルが空の場合 (テーブルに値が格納されていない場合) はアクティビティ A を開始し、カーソルが空でない場合 (テーブルがいっぱいである場合) はアクティビティ B を開始する必要があることです。
テーブルが空かどうかを教えてくれるメソッドが見つかりません。次のようにログを使用しようとしました:
しかし、ログは、テーブルが空の場合は 1 を示し、テーブルにエントリが 1 つある場合は 1 を示し、テーブルにエントリが 2 つある場合は 2 を示します。
カーソルが空かどうかに基づいてさまざまなアクティビティを開始するという私の問題を解決する方法を提案できますか。
android - Android - カーソル例外 - サイズ 1 でリクエストされたインデックス 1
次のコードがあります。
getVEvents を呼び出すと、次の例外が発生します。
177行目は
クエリ メソッドと getVEvents の両方で、カーソルが null かどうかを常にチェックしており、moveToFirst() と moveToNext() を使用しているため、例外が発生する理由と、正確に "index 1 が要求したもの" が何であるかがよくわかりません。サイズが 1 インチというのは、実際には意味します。
どうもありがとう!
android - 共通の列を持ち、共通の行を持たない複数のテーブルをクエリするにはどうすればよいですか?
列数が異なる 2 つのテーブルがあります。両方のテーブルには、true/false を含む列 "inRoster" があります。私が望むのは、inRoster = true で両方のテーブルのすべての行を返すクエリです。2 つのテーブル間に共通の行はありません。2 つのテーブル間で列が異なるため、Union は機能しません。これは可能ですか?
android - noob: アンドロイドボタン
ボタン b1 と b2 の 2 つのボタンがあります。ボタン b1 が押された場合はクエリ q1 を実行し、ボタン b2 が押された場合は別のクエリ q2 を実行します。
これを実装する方法を教えてください.b1_clickメソッドまたはボタンが押されたことを伝える組み込みメソッドを実装する方法.私は試しました
カーソル (c) が最終的なヘルプになるべきだと言っていますか?
android - Android の SQLite データベース カーソルに関するいくつかの質問
アプリケーションにデータベース アクセスを実装するために、Lars Vogel のチュートリアルに従いましたが、いくつかの点で非常に混乱しています...
呼び出しが行われるたびに
fetchTodo
、新しいカーソルが作成されて返されます。ガベージ コレクターの前のカーソルを残します。それで、私が使用しない場合startManagingCursor
、またはそのことについては、カーソルでCursorLoader
a を呼び出す必要がありますか?.close()
もちろん範囲外fetchTodo
、例:カーソル cursor = mNotesAdapter.fetchTodo(); // 何かをする... cursor.close();
私はこのカーソルを使い果たし、次のフェッチで新しいカーソルが作成されます。このように閉じる必要がありますか、それともガベージ コレクターに残す必要がありますか? 私はまったく異なる2つのことについて話していると思いますが... ポイントは、上記の例のように閉じる必要がありますか?
Cursor
メソッドも.deactivate()
あり、ドキュメントには、(アクティブカーソルよりも)使用するリソースが少ないと書かれています。いつこれを使用する必要がありますか?たとえば、私のアプリでは、ListActivity
を介して入力される がありSimpleCursorAdapter
ます (このコードの初期化は 1 回だけ呼び出されます)。使用されているカーソルはクラス メンバー変数です。これは、リストにデータを入力するメソッドの外でカーソルが必要だからです。データベースから何かが削除されたときにデータベースを再クエリするために必要です。しかし、レコードが削除されるまで、これはユーザー アクションであり、発生するまでに時間がかかる場合があります。その間、カーソルを無効にする必要がありますか? もう一度呼び出すと、.requery()
再びアクティブになるからです。または、SimpleCursorAdapter
カーソルがアクティブでないために動作を停止しますか?
編集:deactivate()
これをテストしたところ、カーソルアダプターをセットアップした後に呼び出すことができないことがわかりました。カーソルがアクティブでない場合、リストは空になるため、ListActivity が表示されている限り、カーソルをアクティブにしておく必要があります。結局、それをStartManagingCursor
処理するだけです。または新しいCursorLoader
。
startManagingCursor
/が非推奨であることはわかっていstopManagingCursor
ますが、(少なくとも当面は) Honeycomb をターゲットにしておらずCursorLoader
、今のところ新しいものを扱いたくありません。しかし、上記のチュートリアルでstartManagingCursor
は、どこでも使用されていますが、stopManagingCursor
一度も呼び出されていません。なぜだめですか?Androidは独自の方法でそれを処理しますか? 私が電話すべき状況はありますstopManagingCursor
か?
android - Android:onclick後にデータベースのリストビューデータを表示する
次のようなデータベースがあります:テーブルpepak、テーブルカテゴリ、テーブルサブカテゴリpepak.nameのいずれかをクリックするとカテゴリを表示したいのですが、pepak.nameのいずれかをクリックすると、アプリでエラーが発生して停止しました。
これが私のコードです:
Menu.java
}
PepakCats.java
クリック後にデータベースのリストビューデータを表示するにはどうすればよいですか?