問題タブ [android-cursorloader]
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 - CommonsWare Loaderex を使用した SherlockListFrgament でデータを更新できない
私は ActionBarSherlock ライブラリの SherlockListFragment を使用して、CommonsWare Loaderex sqlite カーソル ローダーを使用してリストを表示しています。 loader.update(...) を使用してテーブル内のデータを更新するには、呼び出しても何も起こりません。どうしたの?
android - CursorLoaderでクエリを制限する
CursorLoaderを介してsqliteデータベースからデータをクエリしようとしています。Android開発者のWebサイトのドキュメントを調べても、制限クエリが見つかりません。
CursorLoader(Context context, Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
CursorLoaderで制限を実装するにはどうすればよいですか?
前もって感謝します
android - CursorLoader、ローカルデータベースのURIを取得
私は初心者のAndroidプログラマーで、最近、ローカルSQLiteデータベースを作成し、SQLiteDatabase.rawQueryを使用してカーソルを返すことでデータベースにアクセスする方法を示すチュートリアルに従いました。データベースにアクセスするためのより良い方法であると思われるCursorLoaderを使用するようにアプリを変更したいと思います。私の問題は、CursorLoaderコンストラクターがURIが指定されることを期待していることです。「file:/// [path todb]」と入力するだけですか?少し厄介なようです。
android - ViewPager PagerAdapter とカーソル - CursorLoader.onLoadFinished が別のクエリで呼び出されない
私はデータベースから引用符を取得する引用アプリケーションのようにやっており、ViewPager に引用符を表示する必要があります。
うまく機能しているように見える CursorPagerAdapter を作成しました。
}
また、データベースを非同期ロードするために CursorLoader を使用しています
ContentProvider を使用
すべてがうまく機能し、すべての引用符がうまく読み込まれますが、今度は検索を実行する必要があります。そこで、データベースにクエリを実行するメソッドを作成します
クエリは良好です。ContentProvider.query() が呼び出され、cursor.getCount() が出力されていることがわかります。
ただし、cursor.setNotificationUri() が設定されていても、MainActivity の onLoadFinished は呼び出されません。アプリケーションの最初の起動時に機能するため、機能していると思います。
私は実際にコンテンツプロバイダーでいくつかのデータを挿入しようとし、 getContext().getContentResolver().notifyChange(uri, null); を呼び出しました。OnLoadFinished をトリガーしたので、この別のクエリが OnLoadFinished を起動しない理由がわかりません。
これを理解してくれる人に感謝します。
android - CursorLoaderに基づくAutoCompleteTextView
そのため、カスタムを同時に使用しながら、を拡張しMultiAutoCompleteTextView
てバックアップするのに問題があります。この問題は、特に電話で発生します。引数としてカーソルを持つメソッドは、このメソッドを最初に呼び出したときに、有効で閉じられていないカーソルを持っています。ただし、後続の呼び出しでは、ヌルカーソルまたは閉じたカーソルのいずれかになります。これは、の管理方法と関係があると思います。 CursorLoader
Tokenizer
mAdapter.setCursorToStringConverter();
convertToString()
LoaderManager
CursorLoader
メソッドをコメントアウトするとsetCursorToStringConverter()
、このビューに入力したテキストに基づいて利用可能な選択肢のリストが表示されます。ただし、convertToString()
メソッドが実装されていないためterminateToken()
、カスタムのメソッドはTokenizer
、現在の文字列値を取得するためにカーソルが使用されていないため、意図した文字列ではなく、カーソルオブジェクトの代表的な文字列を受け取ります。結果のクエリの目的の列の。
誰かが3つのクラス(、、、および)の組み合わせを実装できましCursorLoader/LoaderManger
たMultiAutoCompleteTextView
かTokenizer
?
私はこれで正しい方向に進んでいますか、それともこれは単に不可能ですか?
MultiAutoCompleteTextView
カスタムに裏打ちされたSimpleCursorAdapter
カスタムを実装することができましたTokenizer
。厳密モードではカーソルが明示的に閉じられていないことCursorLoader
について不平を言うので、代わりにこれを実装することが可能かどうか疑問に思っていました。MultiAutoCompleteTextView
どんな助けでも大歓迎です。
更新1
@Olafが提案しsetStringConversionColumn()
たように、代わりにメソッドを呼び出しています。これはを実装しているため、これが利用可能な唯一の時間でsetCursorToStringConverter()
あるため、これを設定しました。onLoadFinished()
Cursor
LoaderManger
これは、に対して1つのアイテムを選択する場合に機能しますが、MultiAutoCompleteTextView
で複数のアイテムを選択することはできませんMultiAutoCompleteTextView
。
onTextChanged()
を呼び出すので、メソッドに問題があると思いますrestartLoader()
。これは、このビューの最初のエントリでは機能しますが、後続のエントリでは機能しません。現時点では何が悪いのかよくわかりません。
更新2
だから私は問題を特定しました。問題はTextWatcherのonTextChanged()
メソッドです。最初のトークンを終了するように選択した後(たとえば、トークンが「Joe Johnson」だった場合)、これにさらに文字を入力するとMultiAutoCompleteTextView
(など) 、メソッドに渡されるal
argの値には、追加された文字だけでなく、ただし、以前に終了したトークンの文字も含まれます(この時点での値はです)。これで、getsの値が設定され、その後クエリに渡されます。このクエリでは、明らかに結果が返されません。この状況を回避する方法はありますか?私はどんな提案にもオープンです。s
onTextChanged()
s
Joe Johnson al
mCursor
Joe Johnson al
onCreateLoader()
更新3
MultiAutoCompleteTextView
カスタムに裏打ちされたSimpleCursorAdapter
カスタムを実装したとき、次のようTokenizer
に設定しました。FilterQueryProvider
そして、何らかの理由で、このrunQuery()
メソッドはTextWatcherのonTextChanged()
メソッドから2回呼び出されます。
したがって、前の例では、最初にメソッドconstraint
に渡される変数はです。次に、2回目のメソッドが呼び出され、変数の値はです。メソッド内で1回だけ呼び出されたのに、なぜメソッドが2回実行されるのかわかりません。 runQuery()
Joe Johnson al
runQuery()
constraint
al
runQuery()
onTextChanged()
android - AndroidListViewのOnClickItemListener内でLoaderManagerとCursorLoaderを使用する方法
初級、中級、上級の3つの項目を一覧表示するListViewを備えたアクティビティ(「最初のアクティビティ」)で始まる単純な(?)Androidアプリケーションがあります。ここまでは順調ですね。次に実行したいのは、ユーザーが「Beginning」をクリックすると、SQLiteデータベースが照会され、データベースで「Beginning」と指定されたすべてのアイテムが取得されることです。次に、2番目のアクティビティ(「2番目のアクティビティ」)を起動して、クエリのすべてのアイテムをそのアクティビティのリストビューに表示します。カーソルを使用してこれを機能させていますが、LoaderManagerとCursorLoaderを使用するようにコードを更新しようとしています。最初のアクティビティのListViewのonItemClickメソッド内にonCreateLoaderメソッドを配置する必要があると思います。例を挙げると、私は次のようなコードを考えています。
}
また、onClickItemで、インテントを作成し、データのバンドルを詰め込みます(2番目のアクティビティのListViewは、onItemClickメソッドにこのデータを必要とします)。とにかく、これを試してみると、EclipseはonItemClick内のonCreateLoaderに不満を持っており、中括弧の不一致、セミコロンの欠落などに関するエラーメッセージがたくさん表示されます。リストアイテムがクリックされたときにデータベースにクエリを実行するにはどうすればよいですか?onCreateLoaderメソッドをonItemClickメソッドの外に移動したが、setItemClickListener内に移動した場合、エラーメッセージは表示されませんが、onItemClickメソッド内でそれを参照するにはどうすればよいですか?
どんな助けでも大歓迎です。よろしくお願いします!
両方の回答をありがとうございました!私はAndroidの初心者です。私はあなたの提案を実行しようとしていますが、もう一度行き詰まっています。GetLevelDataという新しいアクティビティを作成しました。私の最初のアクティビティは次のようになります。
私の新しいアクティビティは次のようになります。
}
textView1は、レイアウトフォルダーのleveldata.xmlにあるLinearLayout内のTextViewです。これを実行しようとすると、startActivityで例外が発生します:アクティビティが見つかりません。私は何が欠けていますか?私'
android - インテントを介してLoaderManagerから別のアクティビティにデータを渡す方法は?
私はAndroidの初心者で、カーソルを使用する(動作中の)コードを、CursorLoaderを使用するように更新しようとしています。私のアプリは、初級、中級、上級の3つの選択肢があるListViewを使用したアクティビティで始まります。選択したアイテムに応じて、別のListViewで2番目のアクティビティを開きます。そのListViewは、すべてのアイテムのレベルがBeginningなどのSQLiteデータベースから入力されます。スタックオーバーフローの他の場所では、実際のデータ取得を処理するために、これら2つのアクティビティの間にアクティビティを挿入することが提案されました。これで、3つのアクティビティがあります。1つには、3つの選択肢があるListViewがあります。その1つは、インテントを介して2番目のアクティビティに文字列を送信します。2番目のアクティビティはデータベースにクエリを実行し、CursorLoaderに選択されたレベルに一致するすべてのレコードから1つの列を取得します。そしてここ' s私の質問。このすべてのデータを3番目のアクティビティに渡して、データをListViewに表示できるようにします。しかし、CursorLoaderからデータを取得するにはどうすればよいですか?私は次のようなことをしたいと思っています:
ここで、myDataは、CursorLoaderからのデータのArrayListです。私はこれを行う方法がわかりません。LoaderManagerを使用してこれを実現するかどうか疑問に思っていますが、これを行う方法もわかりません。
前もって感謝します!
android - CursorLoader の「選択」パラメータによる ListView のフィルタリング
構文が間違っているか、ローダーの仕組みをまだ理解していませんが、現在、データベース内のすべてのアイテムを表示する ListView を取得しています。アクティビティには、今日の日付が表示されたボタンがあります。ユーザーはこれをクリックして日付ダイアログを表示するか、前/次ボタンを押して表示される日付を変更できます。表示されている日付に基づいて ListView をフィルター処理したいので、その日付が保存されているレコードのみが表示されます。
現在、すべてのレコードは
オンラインで見たものに基づいていくつかのバリエーションを試しましたが、基本的には、今日の日付を文字列として表示する「選択」を含めようとしています (すでに SimpleDateFormatter を使用してボタンのテキストとして設定されています)。
と
どちらも NullPointerExceptions を生成します。ローダーの作成時にこれをフィルタリングする正しい方法に関するポインタをいただければ幸いです。
アップデート
fillData()
メソッドを呼び出す前にメソッド (ListView の入力に使用) を呼び出していたため、NullPointerException が発生していたようbtn_logbook_date.setText()
です。これをアクティビティのさらに下に移動したところonCreate
、アプリケーションはクラッシュしなくなりましたが、データが読み込まれなくなりました。今日の日付で新しいレコードを保存するとリストビューに表示されますが、日を変更すると他のレコードが表示されないことに気付きました。ListView アクティビティで今日に戻ると、空白も表示されます。
もともと別のアクティビティからデータベースに保存するときも、SimpleDateFormat
メソッドを使用して上記と同じ形式に変換しているため、保存された文字列とボタンに表示されているテキストは一致するはずです。
アップデート
以下でこの質問に答えました。元の質問は日付によるリストのフィルタリングに関するものであったため、リストの再作成に関する問題は個別に尋ねられます。今日の日付で新しいレコードを作成し、リストビュー アクティビティを開くときにデータを入力することで、これが機能していることを確認しました。Android エミュレーターで日付を変更し、アプリケーションとリストビュー アクティビティを再度開くと、新しく設定された日付に属するレコードを確認できました。
android - 日付ピッカーの変更に基づいてDBからListViewコンテンツを再ロードする
まず、これは2部構成の質問です。3つのボタンとリストビューのアクティビティがあります。1つのボタンで日付ピッカー付きのダイアログフラグメントが開き、ボタンのテキストに選択した日付が表示されます。他の2つのボタンを使用すると、それぞれ前日/翌日に移動できます。ListViewには、選択した日付に対応するレコードが表示されます。
現在、アクティビティをロードすると、ボタンに今日の日付が表示され、リストビューにデータベースからの今日のレコードが表示されます。ローダーを再起動して前/次のボタン内で呼び出すメソッドを作成できたので、一度に1日ナビゲートすると、リストビューが更新されて正しいレコードが表示されますが、日付ピッカーを呼び出して日付を変更するとダイアログ、正しく更新する方法が見つからないようです-これは質問の最初の部分です。
2番目の部分は説明するのが少し難しいです。4レコード(リストビューで4行)の日付を選択すると、4レコードすべてが表示されますが、たとえば、2レコード(リストビューで2行)しかない翌日に行くと、最初のレコードが正しく表示されます。 2レコードですが、次の2行には前の日付のデータが表示されます。これをよりよく説明するために、リストビューの各行にDBレコードの_id番号が表示されていると仮定します。日付1(4つのレコードがある)ではID 1,2,3,4が表示されますが、日付2(2つのレコードがある)に変更するとID5,6,3,4が表示されます。
リストビューの内容を完全にクリアしてから新しい日付を再入力する方法を組み込むことで、両方の問題を一度に解決できると思います。これを行う方法がわかりません。私のコードは以下の通りです:
アップデート
ContentProviderからのクエリ情報の表示:
アップデート
以下の呼び出しrefillData()
は、最初の日付の変更で機能しましたが、再び機能しませんでした。エミュレーターを再起動して再試行した後、2つの別々の日付変更のレコードを確認できましたが、データは再度変更されませんでした。
以下の呼び出しでは、日付を変更してもデータは変更されませんが、ボタンを押して日付ピッカーを再度開くと、バックグラウンド(ダイアログフラグメントの後ろ)のリストビューが更新されます。たとえば、日付2を選択すると、データは変更されません。日付ピッカーを開くと、ダイアログの後ろに日付2のデータが表示されます。日付ピッカーを日付3に設定しましたが、リストビューにはまだ日付2のデータが表示されます。日付ピッカーを再度開くと、日付3のデータがダイアログフラグメントの背後のバックグラウンドで読み込まれます。
refillData()
回線の後で、FragDate.show(...)
または回線の前に呼び出しても、同じ結果が得られますFragmentTransaction ftLogDate...
。
android - サポートライブラリを使用する際のLoaderManagerのエラー
コードをカーソルの使用からCursorLoaderの使用に変換しようとしています。古いバージョンのAndroidをサポートするために、サポートライブラリをインストールし、android.content.CursorLoaderをインポートする代わりに、android.support.v4.content.CursorLoaderをインポートしています。現在、正常にコンパイルされたコードは2つのエラーをスローしています。最初のエラーは、実装時にLoaderManagerにあります。エラーは次のとおりです。LoaderManagerをタイプに解決できません。2番目のエラーは、initLoaderの呼び出しにあります。エラーは次のとおりです。タイプLoaderManagerのメソッドinitLoader(int、Bundle、LoaderManager.LoaderCallbacks)は、引数(int、Bundle、MyList)には適用できません。これが私のコードです:
}