Детали не отображаются из второго вызова API - PullRequest
0 голосов
/ 24 мая 2019

Новый разработчик для Android, так что будьте осторожны! У меня есть вызов API уровня 2, который не работает должным образом. У меня первый уровень (список устройств) работает правильно, но когда я нажимаю на устройство, чтобы посмотреть детали, ничего не отображается. В логах я не вижу вызываемого класса сведений об устройстве вообще, и я не уверен, почему. Любая помощь приветствуется.

Добавлена ​​регистрация в классе сведений об устройстве, но он не отображается при вызове. Когда я нажимаю на устройство из основного списка, я вижу детали в возврате API в зависимости от того, какое устройство я нажимаю, чтобы это работало, я просто не могу заставить его отобразить результаты:

D/MainActivity2: LOOK HERE!!! DeviceDetails(attributes=[Attribute(currentValue=present, dataType=ENUM, name=presence, values=[present, not present])], capabilities=null, commands=[arrived, departed], id=98, name=Presence - Matt)

MainActivity2

class MainActivity2 : AppCompatActivity() {
    private val tag : String = MainActivity2::class.java.simpleName
    private lateinit var adapterDetails: DeviceDetailsAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)
        rv_devices_details.layoutManager = LinearLayoutManager(this)
        rv_devices_details.hasFixedSize()
        adapterDetails = DeviceDetailsAdapter(listOf()) {deviceDetails -> deviceClicked(deviceDetails) }
        rv_devices_details.adapter = adapterDetails
        loadDeviceDetails()
    }

        private fun loadDeviceDetails() {
            GlobalScope.launch(Dispatchers.Main) {
                try {
                    var deviceID: String = intent.getStringExtra("deviceID")
                    val webResponseDetails = DeviceDetailsWebAccess.deviceDetailsApi.getDevicesDetailsAsync(deviceID = deviceID, access_token = "5dbbeea3-91bd-4dbc-983b-af8e2c18e18f").await()
                    if (webResponseDetails.isSuccessful) {
                        val deviceDetails: DeviceDetails? = webResponseDetails.body()
                        Log.d(tag, "LOOK HERE!!! $deviceDetails")
                        adapterDetails.notifyDataSetChanged()
                    } else {
                        Log.e(tag, "Error ${webResponseDetails.code()}")
                        Toast.makeText(this@MainActivity2, "Error ${webResponseDetails.code()}", Toast.LENGTH_LONG).show()
                    }
                } catch (e: IOException) {
                    Log.e(tag, "Exception " + e.printStackTrace())
                    Toast.makeText(this@MainActivity2, "Exception ${e.message}", Toast.LENGTH_LONG).show()
                }
            }
        }
    private fun deviceClicked(deviceDetails: DeviceDetails) {
        Toast.makeText(this, "Clicked: ${deviceDetails.name}", Toast.LENGTH_LONG).show()
        val showDetailActivityIntent = Intent(this, MainActivity2::class.java)
        showDetailActivityIntent.putExtra("deviceID", deviceDetails.id)
        startActivity(showDetailActivityIntent)
    }
    }

DeviceDetailsAdapter

class DeviceDetailsAdapter (private var deviceDetails: List<DeviceDetails>, private val clickDetailsListener: (DeviceDetails) -> Unit) :
    RecyclerView.Adapter<RecyclerView.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        val inflater = LayoutInflater.from(parent.context)
        val viewDetails = inflater.inflate(R.layout.device_detail, parent, false)
        return DeviceDetailHolder(viewDetails)
    }

    override fun onBindViewHolder(holderDetails: RecyclerView.ViewHolder, position: Int) {
        (holderDetails as DeviceDetailHolder).bindDetails(deviceDetails[position], clickDetailsListener)
    }

    override fun getItemCount() = deviceDetails.size

    class DeviceDetailHolder(devicedetailView: View) : RecyclerView.ViewHolder(devicedetailView) {
        fun bindDetails(deviceDetails: DeviceDetails, clickDetailsListener: (DeviceDetails) -> Unit) {
            itemView.device_detail_name.text = deviceDetails.name
            Logger.getLogger(DeviceDetailsAdapter::class.java.name).warning("LOOK HERE NOW!!! $deviceDetails.name")
            itemView.device_detail_id.text = deviceDetails.id
            Logger.getLogger(DeviceDetailsAdapter::class.java.name).warning("LOOK HERE NOW!!! $deviceDetails.id")
        }

    }
}

Activitymain.xml

<android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.example.TestAPI.MainActivity2">

    <android.support.v7.widget.RecyclerView
            android:id="@+id/rv_devices_details"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
</android.support.constraint.ConstraintLayout>

device_detail.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
        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"
        tools:context="com.example.TestAPI.MainActivity2">

    <TextView
            android:id="@+id/device_detail_id"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"

            android:textAppearance="@style/TextAppearance.AppCompat.Headline"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:text="Device ID" android:layout_marginEnd="8dp" app:layout_constraintEnd_toEndOf="parent"/>
    <TextView
            android:id="@+id/device_detail_name"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"

            android:textAppearance="@style/TextAppearance.AppCompat.Headline"
            app:layout_constraintStart_toStartOf="parent"
            tools:text="Device Name" android:layout_marginEnd="8dp" app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/device_detail_id"/>

</android.support.constraint.ConstraintLayout>

Мне кажется, что часть данных пытается как-то опубликовать результаты в первом представлении ИЛИ как-то не получает данные из вызова API.

...