java .lang.ClassCastException: java .lang.Object [] нельзя преобразовать в java .lang.String [] - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь создать пользовательский адаптер данные чертежа из RealmObject () :

RealmObject () возвращает строку, содержащую заголовок и описание, разделенные запятой, которые будут разделены в пользовательском адаптере .

Видимо RealmResults.toArray () имеет тип Array, тогда как пользовательский адаптер принимает Array .Я пытался преобразовать RealmResults в массив строк, добавив, изменив его на results.toArray () как массив , но я получаю следующую ошибку.

**java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[]**

Видимо results.toArray () имеет тип Array, в то время как пользовательский адаптер принимает массив.

Я изменил его на, но получил ошибку.

Main Фрагмент:

override fun onResume() {
    super.onResume()

    Realm.init(context!!)
    val realm = Realm.getDefaultInstance()

    val query = realm.where(CyeFarmListObject::class.java)
    val results = query.findAll()

    val listView = view?.findViewById<ListView>(R.id.moviesListView)

    listView?.setOnItemClickListener { _, _, i, _ ->
        val selectedMovie = results[i]
        val editIntent = Intent(activity, EditMoviesActivity::class.java)
        if (selectedMovie!= null) {
            editIntent.putExtra("movieItem", selectedMovie.getID())
            startActivity(editIntent)
        }
    }

    val array: Array<String> = results.toArray() as Array<String>

    val adapter =
        activity?.let { MyListAdapter(it, array) }
    if (listView != null) {
        listView.adapter = adapter
    }
}

Файл макета:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="15dp"
            android:text="title"
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
            android:textStyle="bold" />


        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="vertical">

            <TextView
                android:id="@+id/description"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="15dp"
                android:layout_marginTop="5dp"
                android:text="description"
                android:textSize="16sp" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

Пользовательский адаптер:

import android.app.Activity
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.TextView

class MyListAdapter(private val context: Activity, private val a: Array<String>)
    : ArrayAdapter<String>(context, R.layout.fragment_list_of_list, a) {

    override fun getView(position: Int, view: View?, parent: ViewGroup): View {

        val inflater = context.layoutInflater
        val rowView = inflater.inflate(R.layout.fragment_list_of_list, null, true)

        var splitter : Array<String> = a.toString().split(",").toTypedArray()
        var split1 = splitter[0]
        var split2 = splitter[1]

        val titleText = rowView.findViewById<TextView>(R.id.title) as TextView
        val descriptionText = rowView.findViewById<TextView>(R.id.description) as TextView

        titleText.text = split1
        descriptionText.text = split2

        return rowView
    }
}

Logcat:

2020-04-08 18:49:03.232 4945-4945/com.my.code E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.my.code PID: 4945
java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[]
    at com.demicode.ccdofieldkit.MovieListFragment.onResume(CyeFarmListFragment.kt:35)
    at androidx.fragment.app.Fragment.performResume(Fragment.java:2747)
    at androidx.fragment.app.FragmentStateManager.resume(FragmentStateManager.java:373)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1199)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
    at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
    at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:442)
    at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2169)
    at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1992)
    at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1947)
    at androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java:1818)
    at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:303)
    at androidx.fragment.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:246)
    at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1244)
    at androidx.viewpager.widget.ViewPager.setCurrentItemInternal(ViewPager.java:669)
    at androidx.viewpager.widget.ViewPager.setCurrentItemInternal(ViewPager.java:631)
    at androidx.viewpager.widget.ViewPager.setCurrentItem(ViewPager.java:612)
    at com.google.android.material.tabs.TabLayout$ViewPagerOnTabSelectedListener.onTabSelected(TabLayout.java:3222)
    at com.google.android.material.tabs.TabLayout.dispatchTabSelected(TabLayout.java:1734)
    at com.google.android.material.tabs.TabLayout.selectTab(TabLayout.java:1727)
    at com.google.android.material.tabs.TabLayout.selectTab(TabLayout.java:1687)
    at com.google.android.material.tabs.TabLayout$Tab.select(TabLayout.java:2080)
    at com.google.android.material.tabs.TabLayout$TabView.performClick(TabLayout.java:2269)
    at android.view.View.performClickInternal(View.java:7327)
    at android.view.View.access$3600(View.java:807)
    at android.view.View$PerformClick.run(View.java:28166)
    at android.os.Handler.handleCallback(Handler.java:907)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:216)
    at android.app.ActivityThread.main(ActivityThread.java:7464)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:955)
...