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

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

ただいまの
回答率

88.64%

【Android Studio】ビルドを通したいがLoaderManagerのエラーが解決しない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,398

newsour

score 21

 前提・実現したいこと

FragmentからActivityのメソッドをコールしてRSSのフィードを出したい。
(大体)「Androidアプリ開発入門」の本の通りに進めているが、環境差異でビルドができない(3.x系対応の本ではあるが、、、)

※v4のサポートライブラリ(LoaderManager)は最近廃止になった様子
https://developer.android.com/reference/android/support/v4/app/LoaderManager.LoaderCallbacks

ちなみにexecute()でくくっているのは本の通りではありませんがくくらない時にoverride fun on~が赤の波線で出ます。
本ではMainActivityで実行されるようです。

 発生している問題・エラーメッセージ

e: C:\Users\taturo\AndroidStudioProjects\Sportable\app\src\main\java\com\example\tatsuro\sportable\RssActivity.kt: (9, 1): Class 'RssActivity' is not abstract and does not implement abstract member @MainThread @NonNull public abstract fun onCreateLoader(p0: Int, @Nullable p1: Bundle?): Loader<Rss!> defined in android.support.v4.app.LoaderManager.LoaderCallbacks
e: C:\Users\taturo\AndroidStudioProjects\Sportable\app\src\main\java\com\example\tatsuro\sportable\RssActivity.kt: (15, 27): Type inference failed: fun <D : Any!> initLoader(p0: Int, p1: Bundle!, p2: LoaderManager.LoaderCallbacks<D!>!): Loader<D!>!
cannot be applied to
(Int,Nothing?,RssActivity)

e: C:\Users\taturo\AndroidStudioProjects\Sportable\app\src\main\java\com\example\tatsuro\sportable\RssActivity.kt: (15, 47): Type mismatch: inferred type is RssActivity but LoaderManager.LoaderCallbacks<(???..???)>! was expected
e: C:\Users\taturo\AndroidStudioProjects\Sportable\app\src\main\java\com\example\tatsuro\sportable\RssActivity.kt: (18, 9): Modifier 'override' is not applicable to 'local function'
e: C:\Users\taturo\AndroidStudioProjects\Sportable\app\src\main\java\com\example\tatsuro\sportable\RssActivity.kt: (20, 9): Modifier 'override' is not applicable to 'local function'
e: C:\Users\taturo\AndroidStudioProjects\Sportable\app\src\main\java\com\example\tatsuro\sportable\RssActivity.kt: (24, 9): Modifier 'override' is not applicable to 'local function'
e: C:\Users\taturo\AndroidStudioProjects\Sportable\app\src\main\java\com\example\tatsuro\sportable\RssActivity.kt: (33, 13): Unresolved reference: recyclerView
:app:compileDebugKotlin FAILED
:app:buildInfoGeneratorDebug

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':app:compileDebugKotlin'.

Compilation error. See log for more details

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 1s

 該当のソースコード

package com.example.newsour.sportable
package com.example.tatsuro.sportable
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v4.app.LoaderManager
import android.support.v4.content.Loader
import android.support.v7.widget.GridLayoutManager

class RssActivity : AppCompatActivity(), LoaderManager.LoaderCallbacks<Rss> {

    fun execute(){
        override fun onCreate(savedInstanceState: Bundle?) {
           super.onCreate(savedInstanceState)
        setContentView(R.layout.news_fragment)
        loaderManager.initLoader(1,null,this)
    }

    override fun onCreateLoader(id:Int,args:Bundle?) = RssLoader(this)
    override fun onLoaderReset(loader: Loader<Rss>?) {}

    override fun onLoadFinished(loader: Loader<Rss>?, data: Rss?) {

        if(data != null){
            val recyclerView = findViewById<RecyclerView>(R.id.rssListView)

//            val adapter = RssArticlesAdapter(this,data.rssArticles){rssArticles ->
//
//            }
//            recyclerView.adapter = adapter

            val layoutManager = GridLayoutManager(this,2)
            recyclerView.layoutManager = layoutManager
        }
    }
    }
}

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

Android Studio 3.1.4
Build #AI-173.4907809, built on July 24, 2018
JRE: 1.8.0_152-release-1024-b02 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

ちなみにexecute()でくくっているのは本の通りではありませんがくくらない時にoverride fun on~が赤の波線で出ます。

表記のエラーはこれが原因です。
LoaderCallbacksを継承しているので、onCreateLoaderonLoaderResetonLoadFinishedの3つの実装が必要ですが
execute(){}に囲まれているので実装されていることになっていないのです。
そして、関数内でoverrideと書くのはおかしい、ともエラーが出ています。


※v4のサポートライブラリ(LoaderManager)は最近廃止になった様子

android.app.LoaderManager は非推奨になりましたが廃止にはなっていません。
むしろv4のLoaderManagerを使えと書いてあります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/09/09 22:24

    ありがとうございます。
    解決いたしましたのでクローズとさせていただきますがv4のLoaderManagerを使った場合にエディタ上打消し線が出るのですが問題なかったのでしょうか?

    キャンセル

  • 2018/09/09 22:44

    そこなんですよね・・・ドキュメントにはgetSupportedLoaderManager() (kotlinだとsupportedLoaderManager)使えと書いてあるんですが、コード上だと非推奨なんですよね
    Android9ではまだ使えますが、将来のバージョンでいつ使えなくなるかは分かりません

    キャンセル

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

  • ただいまの回答率 88.64%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る