質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

4060閲覧

AsyncTaskLoaderを使ってSQLiteを実行する方法

nnnnn

総合スコア26

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

1クリップ

投稿2018/08/28 15:30

前提・実現したいこと

Android StudioでJavaを使ってアプリを制作しております。

SQLiteを実行する際に、
非同期で処理が行えるようにしたいと考え、
(API28でもdeprecatedにならない)android.support.v4.content.AsyncTaskLoaderを使った形で
AsyncTaskLoaderを使おうと考えました。

しかし、特に下記のgetLoaderManagerと書いた場所でエラーが出るのですが、
直す方法がわからず、困っております。

java

1//この書き方だと、 2//「getLoaderManager」がdeprecatedと表示されてしまいます。 3getLoaderManager().initLoader(0, null,--使用するcallback名--);

java

1//この書き方だと、 2//「getSupportLoaderManager」が赤文字のエラーになってしまいます。 3//(エラーは「cannot resolved method」) 4getSupportLoaderManager().initLoader(0, null,--使用するcallback名--);

発生している問題

非同期処理を行うために、
AsyncTaskLoaderを使おうと考えたのですが、
android.content.AsyncTaskLoaderを使用する形にすると
API28ではdeprecatedになってしまうということがわかりました。
https://developer.android.com/reference/android/content/AsyncTaskLoader

そのため、こちらの
android.support.v4.content.AsyncTaskLoaderを使い
非同期処理を行おうと考えました。
https://developer.android.com/reference/android/support/v4/content/AsyncTaskLoader

しかし、
エラーが出てしまい、直し方がわからず、ここ数日悩んでいる状態です。

(現状コードのサンプルの一部を、下記に添付させていただきます)

Java

1import android.app.Activity; 2import android.os.Bundle; 3import android.support.v4.app.LoaderManager; 4import android.support.v4.content.Loader; 5 6public class MainActivity extends Activity { 7 8 @Override 9 protected void onCreate(Bundle savedInstanceState) { 10 super.onCreate(savedInstanceState); 11 setContentView(R.layout.activity_main); 12 13 LoaderManager.LoaderCallbacks AsyncDatabaseLoader = new LoaderManager.LoaderCallbacks() { 14 15 @Override 16 public Loader onCreateLoader(int id, Bundle args) { 17 18 //データベース関連の処理をここで行う 19 20 return null; 21 } 22 23 @Override 24 public void onLoadFinished(Loader loader, Object data) { 25 26 } 27 28 @Override 29 public void onLoaderReset(Loader loader) { 30 31 } 32 33 }; 34 35 //ここの「getSupportLoaderManager」が赤文字のエラーになってしまいます。(エラーは「cannot resolved method」) 36 getSupportLoaderManager().initLoader(0, null, AsyncDatabaseLoader); 37 //この書き方に変えると、「getLoaderManager」がdeprecatedと表示されてしまいます。 38 getLoaderManager().initLoader(0, null, AsyncDatabaseLoader); 39 40 } 41}

補足情報(FW/ツールのバージョンなど)

MacOS High Sierraにて制作
Android Studio 3.1.4

compileSdkVersionとtargetSdkVersionは28で試しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

android.app.Activityではなく、android.support.v4.app.FragmentActivityを継承してください。
(フラグメントは使用していなくても構いません)

以前、似たような質問に回答しましたので、そちらもご覧ください。
質問はFragmentに関してですが、LoaderManagerに関しても同様です。
support-v4ライブラリの機能を使用するには、FragmentActivityを継承する必要があります。


マニュアルを見る限りだと、
android.app.Activity#getLoaderManagerはAPI28でdeprecatedになったと書かれています。
android.support.v4.app.FragmentActivity#getSupportLoaderManagerは特にdeprecatedとは書かれていません。
getSupportLoaderManagerを使用するのは問題ないと思います。


余談です。

ところで、上記のマニュアルを漁っていて、気がついたのですが、android.support.v4.app.LoaderManager#getInstanceなるメソッドがありました。
何となくgetSupportLoaderManagerと同じような機能のようでしたので、ちょっと試してみました。

java

1import android.support.v4.app.FragmentActivity; 2import android.support.v4.app.LoaderManager; 3 4public class MainActivity extends FragmentActivity { 5 @Override 6 protected void onCreate(Bundle savedInstanceState) 7 { 8 super.onCreate(savedInstanceState); 9 //LoaderManager loaderManager = this.getSupportLoaderManager(); 10 LoaderManager loaderManager = LoaderManager.getInstance(this); 11 } 12}

ただし、support-v4のversionを28にしないとエラーが出ました。

// build.gradle dependencies { // こちらではビルドエラー。 //implementation 'com.android.support:support-v4:27.+' // こちらで使える。 implementation 'com.android.support:support-v4:28.+' }

もしgetSupportLoaderManagerがdeprecatedであるならば、これが代わりになるのかもしれませんね。
まぁ無理して使うことはないと思いますが、頭の片隅にでも置いといてください。

投稿2018/08/29 12:08

編集2018/08/30 14:43
katsuko

総合スコア3469

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nnnnn

2018/08/30 06:52 編集

katsukoさん、 いつもありがとうございます! android.support.v4.app.FragmentActivityを使った方がいいんですね、 色々試している際にapp.FragmentActivityを使うとエラーが一瞬消えたことがあったんですが、 フラグメントがうまく使えず断念していました…。 使用しなくても構わないという追記、大変助かります! android.support.v4.app.FragmentActivityを継承という事でしたので、 ``` //import android.app.Activity; import android.support.v4.app.FragmentActivity; ``` ``` public class MainActivity extends FragmentActivity { // public class MainActivity extends Activity { ``` 上記のように変更してみたのですが、 getSupportLoaderManager() getLoaderManager() 共に、deprecatedと表示されてしまいます。 教えていただいた似たような質問も読ませていただいたのですが、 変更方法など、誤っていますでしょうか…? (追記です) compileSdkVersionとtargetSdkVersionは27にすると getLoaderManagerもgetSupportLoaderManagerも deprecatedにはならないことがわかりました! 実際のアプリではまだ27なので、このまま進められるかもしれないのですが、 28にした場合にエラーになるのが気になります…。
nnnnn

2018/08/30 14:49

お調べいただき、ありがとうございます! それでは、android.support.v4.app.FragmentActivity#getSupportLoaderManagerを使う形で 試してみたいと思います! そしてgetInstanceというものもありそうなんですね、 私はまだ通常の非同期処理もうまく使えていないため すぐには使うことができない可能性が高いのですが、 今後、必要が出てきたときに参考にさせていただきます。 非同期処理関係について、 今回特にお聞きしたgetSupportLoaderManager以外の部分でも 実はまだうまくいかない箇所があるのですが、 こちらには書いていないコードで発生しているエラーの可能性もあるため、 今回の質問としては一旦お聞きした回答でベストアンサーとさせていただきます。 (エラーの対処をしている最中に、  今回の質問に関連する内容で、  気づいた点・今後こちらの質問を見ていただく方の参考になりそうな情報が  もしもでてきましたら、  その際は追記させていただきます) ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問