хочу создать новостное приложение на Android, но оно показывает E / RecyclerView: адаптер не подключен;пропускающий макет - PullRequest
0 голосов
/ 21 сентября 2019

извините за мой плохой английский, и я новичок в кодировании. Я в основном копировал учебное видео с Youtube https://www.youtube.com/watch?v=mvVcqzJYAbY

и у меня не было с этим серьезных проблем, но ближе к концу части 2vid при тестировании «ListNews.kt» почти закончил, щелкнув по имени веб-сайта и завершению работы приложения

E / RecyclerView: адаптер не подключен;пропуская макет

вот что я написал (Android Studio, androidx проверено)

РЕДАКТИРОВАТЬ: похоже, NullPointerException решил thx

ListNews.kt

lass ListNews : AppCompatActivity() {

    var source = ""
    var webHotUrl: String? = ""

    lateinit var dialog: AlertDialog
    lateinit var mService: NewsService
    lateinit var adapter: ListNewsAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_list_news)

        // init view
        mService = Common.newsService

        dialog = SpotsDialog(this)

        swipe_to_refresh.setOnRefreshListener { loadNews(source, true) }

        diagonalLayout.setOnClickListener {
            // implement soon
        }

        list_news.setHasFixedSize(true)
        list_news.layoutManager = LinearLayoutManager(this)

        if(intent != null) {
            source = intent.getStringExtra("source")
            if(source.isNotEmpty()) {
                loadNews(source, false)
            }
        }
    }

    private fun loadNews(source: String?, isRefreshed: Boolean) {
        if (isRefreshed) {

            dialog.show()
            mService.getNewsFromSource(Common.getNewsAPI(source!!))
                .enqueue(object : Callback<News>{
                    override fun onFailure(call: Call<News>, t: Throwable) {

                    }

                    override fun onResponse(call: Call<News>, response: Response<News>?) {

                        dialog.dismiss()


                        // Get first article to hot news
                        Picasso.with(baseContext)
                            .load(response!!.body()!!.articles!![0].title)
                            .into(top_image)

                        top_title.text = response!!.body()!!.articles!![0].title
                        top_author.text = response!!.body()!!.articles!![0].author

                        webHotUrl = response!!.body()!!.articles!![0].url

                        // Load all remain articles
                        val removeFirstItem = response!!.body()!!.articles

                        // Because we get first item to hot new, so we need remove it
                        removeFirstItem!!.removeAt(0)

                        adapter = ListNewsAdapter(removeFirstItem!!, baseContext)
                        adapter.notifyDataSetChanged()
                        list_news.adapter = adapter



                    }

                })
        }

ListNewAdapter

1 Ответ

0 голосов
/ 21 сентября 2019

Похоже, ваш Stringbuilder возвращает неправильный URL-адрес, поэтому сделайте URL-адрес простым, как показано ниже, затем пройдите и попробуйте:

   String Url = "https://newsapi.org/v2/topo-headline?sources=<source>&apiKey=XXXXX";
...