ArrayAdapter 的空对象引用

Null object reference for ArrayAdapter

我正在尝试使 ArrayList 适应 Fragment 中的 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)

    }




}

我的片段XML - fragment_new_flight.xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary"
    tools:context=".newFlightFragment">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/lblNewFlightInstruction"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingStart="@dimen/abPadding"
            android:text="@string/lblNewFltInstr"
            android:textSize="@dimen/medFont"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="@dimen/abPadding"
            android:paddingVertical="8dp"
            android:text="@string/airline_name"
            android:textSize="@dimen/medFont"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/lblNewFlightInstruction" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="@dimen/abPadding"
            android:paddingVertical="8dp"
            android:text="@string/fsCode"
            android:textSize="@dimen/medFont"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/actxtAirlineName" />

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="@dimen/abPadding"
            android:paddingVertical="8dp"
            android:text="@string/fltNumber"
            android:textSize="@dimen/medFont"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/etxtFSCode" />

        <AutoCompleteTextView
            android:id="@+id/actxtAirlineName"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:hint="@string/airline_name"
            android:paddingStart="8dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/textView3"
            app:layout_constraintTop_toTopOf="@+id/textView" />

.
.
.
    </androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>

我在设置适配器时遇到错误:

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)

}
}

希望它能奏效谢谢!编码愉快!

  1. 您忘记重写 onCreateView
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.fragment_new_flight, container, false)
    }
  1. 当 onCreate 调用视图不膨胀时,将 onCreate 更改为 onViewCreated

我看不到你在哪里夸大了片段的视图。也许有问题?