Kotlin cra sh в массиве-адаптере во фрагменте: системные службы недоступны операциям до onCreate () - PullRequest
0 голосов
/ 19 февраля 2020

Мне нужно сделать простое приложение для школы, но по какой-то причине мое приложение продолжает падать из-за следующей ошибки:

System services not available to Activities before onCreate()

После небольшой отладки я обнаружил, что она падает при создании ArrayAdapter. Я пробовал много вещей, но по какой-то причине он продолжает падать с той же ошибкой.

Я уже пробовал много вещей, включая: - запуск в MainActivity (который дал лучшие результаты) - запуск прямо в onCreate () - запустив его в onViewCreated () - и в нескольких других местах ...

Я хотел создать простое приложение для друзей, где люди могли бы вводить свои данные в мой телефон, ничего удивительного , Мне нужно получить данные из URL, я использовал json .org, чтобы создать простой json (это задание). Все данные, которые я получаю, получаются с URL-адреса, и список также полон. Я просто не знаю, как прикрепить его к списку ...

package com.vb.vriendenboekje8.ui.home

import android.app.Activity
import android.content.Context
import android.os.AsyncTask
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.ListView
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import com.vb.vriendenboekje8.MainActivity
import com.vb.vriendenboekje8.R
import kotlinx.android.synthetic.main.fragment_home.*
import kotlinx.android.synthetic.main.fragment_home.view.*
import org.json.JSONArray
import org.json.JSONObject
import java.net.URL

class HomeFragment : Fragment()
{
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View?
    {
        val view = inflater.inflate(R.layout.fragment_home, container, false)

        var lstFriends : ListView = view.findViewById(R.id.lstFriends)

        LoadJsonTask(lstFriends).execute("<url to json here>")

        return view
    }

    class LoadJsonTask(lstFriends : ListView) : AsyncTask<String, Void, String>()
    {
        var lstFriends : ListView

        init
        {
            this.lstFriends = lstFriends
        }

        //load http request and get Json data
        override fun doInBackground(vararg params: String?) : String
        {
            var json : String

            val stringURL = params[0]
            json = URL(stringURL).readText()

            return json
        }

        override fun onPostExecute(result: String?)
        {
            super.onPostExecute(result)

            val friendsJson = JSONArray(result)
            var friendsList : MutableList<String> = mutableListOf()

            //clear the friends list
            friendsList.clear()

            //add names to list
            for (i in 0..(friendsJson.length()-1))
            {
                val friend : JSONObject = friendsJson[i] as JSONObject
                friendsList.add(friend.get("Naam") as String)
            }

            val adapter = ArrayAdapter<String>(FragmentActivity(), android.R.layout.simple_list_item_1, friendsList) //where the app crashes
            this.lstFriends.setAdapter(adapter)
        }
    }
}

макет моего фрагмента:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/lstFriends"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

полная ошибка:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.vb.vriendenboekje8, PID: 31342
    java.lang.IllegalStateException: System services not available to Activities before onCreate()
        at android.app.Activity.getSystemService(Activity.java:6649)
        at android.view.LayoutInflater.from(LayoutInflater.java:284)
        at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:216)
        at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:210)
        at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:196)
        at com.vb.vriendenboekje8.ui.home.HomeFragment$LoadJsonTask.onPostExecute(HomeFragment.kt:76)
        at com.vb.vriendenboekje8.ui.home.HomeFragment$LoadJsonTask.onPostExecute(HomeFragment.kt:39)
        at android.os.AsyncTask.finish(AsyncTask.java:755)
        at android.os.AsyncTask.access$900(AsyncTask.java:192)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:772)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7682)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

Если у кого-то есть идеи или я что-то вижу, я поступаю неправильно, пожалуйста, дайте мне знать.

PS я новичок в kotlin и android development

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...