Новый разработчик для 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.