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