Android ArrayAdapter的空对象引用

Android ArrayAdapter的空对象引用,android,android-fragments,kotlin,android-arrayadapter,Android,Android Fragments,Kotlin,Android Arrayadapter,我正在尝试将ArrayList改编为片段中的AutoCompleteTextView。我已经在另一个程序中使用了这个,我正在MainActivity中应用适配器 我得到的错误是: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.AutoCompleteTextView.setAdapter(android.widget.ListAdapter)' on a null obj

我正在尝试将ArrayList改编为片段中的AutoCompleteTextView。我已经在另一个程序中使用了这个,我正在MainActivity中应用适配器

我得到的错误是:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.AutoCompleteTextView.setAdapter(android.widget.ListAdapter)' on a null object reference
我的片段代码-newFlightFrament.kt:

package com.android.joncb.flightlogbook

import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.widget.ArrayAdapter
import com.android.joncb.flightlogbook.ExtFunctions.CreateList
import com.android.joncb.flightlogbook.dto.AirlineDTO
import com.google.gson.GsonBuilder
import kotlinx.android.synthetic.main.fragment_new_flight.*


private const val ARG_PARAM1 = "airlines"

class newFlightFragment : Fragment() {
    // TODO: Rename and change types of parameters
    private var param1: String? = null
    private var airlineNameOnly = ArrayList<String>()
    private var airlineFSCodeOnly = ArrayList<String>()


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        arguments?.let {
            param1 = it.getString(ARG_PARAM1)

 //           Log.e("args", param1)

            println(param1)

            val gson = GsonBuilder().create()

            val tempList :List<AirlineDTO> = gson.fromJson(param1,Array<AirlineDTO>::class.java).toList()
            val airlines :ArrayList<AirlineDTO> = arrayListOf(AirlineDTO())
            airlines.addAll(tempList)

            airlineNameOnly = CreateList(airlines, "airlineName")!!
            airlineFSCodeOnly = CreateList(airlines, "FS")!!


        }

//        val adapter = context?.let {
//            ArrayAdapter<String>(
//                it,
//                android.R.layout.simple_list_item_1,
//                airlineNameOnly
//            )
//        }

    val adapter = ArrayAdapter<String>(requireActivity().baseContext,android.R.layout.simple_list_item_1,airlineNameOnly)
        actxtAirlineName.setAdapter(adapter)

    }




}
注意,在这个调用上面的注释部分中,我尝试了另一种方法,这导致了相同的错误

我可以确认ArrayList airlineNameOnly已正确填充

任何想法都是好主意


谢谢。

根据我的更改代码

首先包括这个

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
            return inflater.inflate(R.layout. fragment_new_flight, container, false)
        }

    arguments?.let {
                param1 = it.getString(ARG_PARAM1)

     //           Log.e("args", param1)

                println(param1)

                val gson = GsonBuilder().create()

                val tempList :List<AirlineDTO> = gson.fromJson(param1,Array<AirlineDTO>::class.java).toList()
                val airlines :ArrayList<AirlineDTO> = arrayListOf(AirlineDTO())
                airlines.addAll(tempList)

                airlineNameOnly = CreateList(airlines, "airlineName")!!
                airlineFSCodeOnly = CreateList(airlines, "FS")!!




    //        val adapter = context?.let {
    //            ArrayAdapter<String>(
    //                it,
    //                android.R.layout.simple_list_item_1,
    //                airlineNameOnly
    //            )
    //        }

        val adapter = ArrayAdapter<String>(requireActivity().baseContext,android.R.layout.simple_list_item_1,airlineNameOnly)
            actxtAirlineName.setAdapter(adapter)

}
}
override fun onCreateView(充气机:布局充气机,容器:ViewGroup?,savedInstanceState:Bundle?):视图?{
返回充气机。充气(右布局。碎片\新航班,集装箱,假)
}
争论?让我们{
param1=it.getString(ARG_param1)
//Log.e(“args”,参数1)
println(参数1)
val gson=GsonBuilder().create()
val templast:List=gson.fromJson(param1,Array::class.java).toList()
val airlines:ArrayList=arrayListOf(AirlineDTO())
airlines.addAll(圣殿骑士)
airlineName=CreateList(航空公司,“airlineName”)!!
airlineFSCodeOnly=CreateList(航空公司,“FS”)!!
//val适配器=上下文?.let{
//阵列适配器(
//它,,
//android.R.layout.simple\u list\u item\u 1,
//仅限航空公司
//            )
//        }
val adapter=ArrayAdapter(requireActivity().baseContext,android.R.layout.simple_list_item_1,仅限AirlineName)
actxtAirlineName.setAdapter(适配器)
}
}
希望它能起作用,谢谢!快乐编码

  • 您忘记了覆盖创建视图
  • 当onCreate调用视图未膨胀时,将onCreate更改为onViewCreated

  • 我看不出你在哪里夸大了你的观点。也许有问题?

    片段的生命周期与活动不同。您不能在
    onCreate
    中使用视图。(并且您没有膨胀视图层次结构。)首先阅读:忘记
    baseContext
    ,您将失去主题。请解释一下你到底改变了什么,以及为什么它会起作用。好的!让我给你一个完整的解释,为什么你要把代码放在类中。它甚至不会编译并将代码包装到函数中。谢谢@Cong Hai。这就成功了。在尝试其他解决方案时,我确实尝试充气,但现在意识到我在适配器后充气。我还在想这个。慢慢地,慢慢地,但要到达那里。谢谢TanyaY。这就是问题所在-只是尝试在应用适配器后充气,因此寻找其他解决方案。
    actxtAirlineName.setAdapter(adapter)
    
        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
                return inflater.inflate(R.layout. fragment_new_flight, container, false)
            }
    
        arguments?.let {
                    param1 = it.getString(ARG_PARAM1)
    
         //           Log.e("args", param1)
    
                    println(param1)
    
                    val gson = GsonBuilder().create()
    
                    val tempList :List<AirlineDTO> = gson.fromJson(param1,Array<AirlineDTO>::class.java).toList()
                    val airlines :ArrayList<AirlineDTO> = arrayListOf(AirlineDTO())
                    airlines.addAll(tempList)
    
                    airlineNameOnly = CreateList(airlines, "airlineName")!!
                    airlineFSCodeOnly = CreateList(airlines, "FS")!!
    
    
    
    
        //        val adapter = context?.let {
        //            ArrayAdapter<String>(
        //                it,
        //                android.R.layout.simple_list_item_1,
        //                airlineNameOnly
        //            )
        //        }
    
            val adapter = ArrayAdapter<String>(requireActivity().baseContext,android.R.layout.simple_list_item_1,airlineNameOnly)
                actxtAirlineName.setAdapter(adapter)
    
    }
    }
    
        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
            return inflater.inflate(R.layout.fragment_new_flight, container, false)
        }