首页 > 解决方案 > 如何解决此错误:系统服务在 onCreate() 之前对活动不可用

问题描述

我收到了这个错误ListTaskAdapter

这是代码:

class ListTaskAdapter(
private val activity: Activity,
private val data: ArrayList<HashMap<String, String>>,
private val database: DBHelper
) :
    BaseAdapter() {
    override fun getCount(): Int {
        return data.size
    }

override fun getItem(position: Int): Any {
    return position
}

override fun getItemId(position: Int): Long {
    return position.toLong()
}

override fun getView(
    position: Int,
    convertView: View,
    parent: ViewGroup
): View {
    var convertView = convertView
    var holder: ListTaskViewHolder? = null
    if (convertView == null) {
        holder = ListTaskViewHolder()
        convertView =
            LayoutInflater.from(activity).inflate(R.layout.task_list_row, parent, false)
        holder.task_name = convertView.findViewById(R.id.task_name)
        holder.checkBtn = convertView.findViewById(R.id.checkBtn)
        convertView.tag = holder
    } else {
        holder = convertView.tag as ListTaskViewHolder
    }
    val singleTask = data[position]
    val tmpHolder = holder
    holder.task_name!!.id = position
    holder!!.checkBtn!!.id = position
    try {
        holder.checkBtn!!.setOnCheckedChangeListener(null)
        if (singleTask["status"]!!.contentEquals("1")) {
            holder.task_name!!.text =
                Html.fromHtml("<strike>" + singleTask["task"] + "</strike>")
            holder.checkBtn!!.isChecked = true
        } else {
            holder.task_name!!.text = singleTask["task"]
            holder.checkBtn!!.isChecked = false
        }
        holder.checkBtn!!.setOnCheckedChangeListener { buttonView, isChecked ->
            if (isChecked) {
                database.updateTaskStatus(singleTask["id"]!!, 1)
                tmpHolder!!.task_name!!.text =
                    Html.fromHtml("<strike>" + singleTask["task"] + "</strike>")
            } else {
                database.updateTaskStatus(singleTask["id"]!!, 0)
                tmpHolder!!.task_name!!.text = singleTask["task"]
            }
        }
    } catch (e: Exception) {
    }
    return convertView
}

}

class ListTaskViewHolder {
    var task_name: TextView? = null
    var checkBtn: CheckBox? = null
}

和我的 Logcat:

java.lang.IllegalStateException: System services not available to Activities before onCreate()
    at android.app.Activity.getSystemService(Activity.java:6014)
    at android.view.LayoutInflater.from(LayoutInflater.java:229)
    at com.riddhi.nfine.EMI.ListTaskAdapter.getView(ListTaskAdapter.kt:42)
    at android.widget.AbsListView.obtainView(AbsListView.java:2366)
    at android.widget.ListView.measureHeightOfChildren(ListView.java:1408)
    at android.widget.ListView.onMeasure(ListView.java:1315)
    at com.riddhi.nfine.EMI.NoScrollListView.onMeasure(NoScrollListView.kt:26)
    at android.view.View.measure(View.java:23169)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1535)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:825)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:704)
    at android.view.View.measure(View.java:23169)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1535)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:825)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:704)
    at android.view.View.measure(View.java:23169)
    at androidx.core.widget.NestedScrollView.measureChildWithMargins(NestedScrollView.java:1599)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
    at androidx.core.widget.NestedScrollView.onMeasure(NestedScrollView.java:585)
    at android.view.View.measure(View.java:23169)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749)
    at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:760)
    at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:833)
    at android.view.View.measure(View.java:23169)
    at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1638)
    at android.view.View.measure(View.java:23169)
    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
    at android.view.View.measure(View.java:23169)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
    at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
    at android.view.View.measure(View.java:23169)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749)
    at androidx.appcompat.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:403)
    at android.view.View.measure(View.java:23169)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
    at android.view.View.measure(View.java:23169)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1535)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:825)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:704)
    at android.view.View.measure(View.java:23169)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
    at com.android.internal.policy.DecorView.onMeasure(DecorView.java:716)
    at android.view.View.measure(View.java:23169)
    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2718)
    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1572)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1855)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
    at android.view.Choreographer.doCallbacks(Choreographer.java:761)
2020-07-29 06:29:57.381 10985-10985/com.riddhi.nfine E/AndroidRuntime:     at android.view.Choreographer.doFrame(Choreographer.java:696)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

我查看了各种问题,但找不到正确的解决方案,如果有人可以帮助我解决这个问题,我参考了https://github.com/frsarker/ToDo-Task-App-using-Java-in-Android


这是我的片段代码:

class EmiFragment : Fragment() {

lateinit var mydb: DBHelper
lateinit var empty: LinearLayout
lateinit var scrollView: NestedScrollView
lateinit var todayContainer: LinearLayout
lateinit var tomorrowContainer:LinearLayout
lateinit var otherContainer:LinearLayout
lateinit var taskListToday: NoScrollListView
lateinit var taskListTomorrow:NoScrollListView
lateinit var taskListUpcoming:NoScrollListView
lateinit var addNew: Button
var todayList =
    ArrayList<HashMap<String, String>>()
var tomorrowList =
    ArrayList<HashMap<String, String>>()
var upcomingList =
    ArrayList<HashMap<String, String>>()

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    activity?.window?.decorView?.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
    val view = inflater.inflate(R.layout.fragment_emi, container, false)

    mydb = activity?.let { DBHelper(it) }!!
    empty = view.findViewById<LinearLayout>(R.id.empty)
    scrollView = view.findViewById<NestedScrollView>(R.id.scrollView)
    todayContainer = view.findViewById<LinearLayout>(R.id.todayContainer)
    tomorrowContainer = view.findViewById<LinearLayout>(R.id.tomorrowContainer)
    otherContainer = view.findViewById<LinearLayout>(R.id.otherContainer)
    taskListToday = view.findViewById(R.id.taskListToday)
    taskListTomorrow = view.findViewById(R.id.taskListTomorrow)
    taskListUpcoming = view.findViewById(R.id.taskListUpcoming)
    addNew=view.findViewById(R.id.add_new)
    addNew.setOnClickListener{
        val intent = Intent (activity, AddModifyTask::class.java)
        activity?.startActivity(intent)
    }

    return view
}


override fun onResume() {
    super.onResume()
    populateData()
}


fun populateData() {
    mydb = activity?.let { DBHelper(it) }!!
    activity?.runOnUiThread(Runnable { fetchDataFromDB() })

}


fun fetchDataFromDB() {
    todayList.clear()
    tomorrowList.clear()
    upcomingList.clear()
    val today: Cursor = mydb.getTodayTask
    val tomorrow: Cursor = mydb.getTomorrowTask
    val upcoming: Cursor = mydb.getUpcomingTask
    loadDataList(today, todayList)
    loadDataList(tomorrow, tomorrowList)
    loadDataList(upcoming, upcomingList)
    if (todayList.isEmpty() && tomorrowList.isEmpty() && `upcomingList.isEmpty()) {`
        empty.visibility = View.VISIBLE
        scrollView.visibility = View.GONE
    } else {
        empty.visibility = View.GONE
        scrollView.visibility = View.VISIBLE
        if (todayList.isEmpty()) {
            todayContainer.visibility = View.GONE
        } else {
            todayContainer.visibility = View.VISIBLE
            loadListView(taskListToday, todayList)
        }
        if (tomorrowList.isEmpty()) {
            tomorrowContainer.visibility = View.GONE
        } else {
            tomorrowContainer.visibility = View.VISIBLE
            loadListView(taskListTomorrow, tomorrowList)
        }
        if (upcomingList.isEmpty()) {
            otherContainer.visibility = View.GONE
        } else {
            otherContainer.visibility = View.VISIBLE
            loadListView(taskListUpcoming, upcomingList)
        }
    }
}


fun loadDataList(
    cursor: Cursor?,
    dataList: ArrayList<HashMap<String, String>>
) {
    if (cursor != null) {
        cursor.moveToFirst()
        while (!cursor.isAfterLast) {
            val mapToday =
                HashMap<String, String>()
            mapToday["id"] = cursor.getString(0).toString()
            mapToday["task"] = cursor.getString(1).toString()
            mapToday["date"] = cursor.getString(2).toString()
            mapToday["status"] = cursor.getString(3).toString()
            dataList.add(mapToday)
            cursor.moveToNext()
        }
    }
}

fun loadListView(
    listView: NoScrollListView,
    dataList: ArrayList<HashMap<String, String>>
) {
    val adapter = ListTaskAdapter(Activity(), dataList, mydb)
    listView.adapter = adapter
    listView.onItemClickListener =
        OnItemClickListener { parent, view, position, id ->
            val i = Intent(activity, AddModifyTask::class.java)
            i.putExtra("isModify", true)
            i.putExtra("id", dataList[+position]["id"])
            startActivity(i)
        }
}

}

标签: android

解决方案


推荐阅读