Как получить значение из класса Serializable в kotlin? - PullRequest
0 голосов
/ 15 октября 2018

У меня есть fragment, который обрабатывает objects.поэтому мне нужно отправить значения Instance в OnCreateview (), поэтому я хочу преобразовать мою сериализуемую форму, поэтому я создаю эти классы с помощью getter / setter

BeanDemo.kt

class BeanDemo : Serializable {

    var MyAppDatabase: AppDatabase ? = null

    constructor() {

    }

    //secoutry constructor

    constructor(appDatabase: AppDatabase){
        this. MyAppDatabase =  appDatabase
        Log.d("appDatabase : Bean", "appDatabase$appDatabase")
    }

    //getter/setter methods

    fun getName(): AppDatabase? {
        Log.d("appDatabase : getName", "appDatabase$MyAppDatabase")
        return MyAppDatabase
    }

    fun setName(NEWAPPDB: AppDatabase) {
        Log.d("appDatabase : NEWAPPDB", "appDatabase$NEWAPPDB")
        MyAppDatabase = NEWAPPDB
    }
}

SendingFragment.kt

class SendingFragment: Fragment(),Serializable
{

    private var linearLayoutManager: LinearLayoutManager? = null

    companion object {
        /**
         * new instance pattern for fragment
         */
        @JvmStatic
        fun newInstance(myObject: List<TransactionEntity>?, cc: Context, appDatabase: AppDatabase, networkDefinitionProvider: NetworkDefinitionProvider, incoming: TransactionAdapterDirection): SendingFragment {

            val gson = Gson()
            val gson1 = GsonBuilder().create()

            val sampleVar = BeanDemo(appDatabase)
            sampleVar.setName(appDatabase)

            val bundle = Bundle()
            bundle.putSerializable("serializedObject",sampleVar)
            val sendFragament = SendingFragment()
            sendFragament.arguments = bundle
            return sendFragament
        }
    }


    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

        val beanDemo: BeanDemo
        val bundle = arguments
        beanDemo = bundle!!.getSerializable("serializedObject") as BeanDemo
        val name = beanDemo.getName()

        // Inflate the layout for this fragment
        val rootView = inflater.inflate(R.layout.send_fragment, container, false)
        val recyclerView = rootView.findViewById<RecyclerView>(R.id.transaction_recycler_out) as RecyclerView
        linearLayoutManager = LinearLayoutManager(activity, LinearLayout.VERTICAL, false)
        recyclerView.layoutManager = linearLayoutManager
        //recyclerView.adapter = DuplicateTransactionRecyclerAdapter(NewIT,NewAPPDB,NewINCOMTYPE,NewNETWORKPROVSTR)
        recyclerView.setHasFixedSize(true)
        return rootView
    }
}

Проблема: я могу установить значение в экземпляре класса во фрагменте, но не могу получить данные в OnCretaview (). Nullзначение является возвращением.пожалуйста, направьте меня, что я делаю ошибки.Заранее спасибо

ОБНОВЛЕНИЕ

@Database(entities = {AddressBookEntry.class, Token.class, Balance.class, TransactionEntity.class}, version = 1)
@TypeConverters({RoomTypeConverters.class})
public abstract class AppDatabase extends RoomDatabase implements Serializable {

    public abstract AddressBookDAO getAddressBook();

    public abstract TokenDAO getTokens();

    public abstract TransactionDAO getTransactions();

    public abstract BalanceDAO getBalances();
}

1 Ответ

0 голосов
/ 15 октября 2018

Если класс AppDatabase сам по себе не является сериализуемым, вы не можете сериализовать BeanDemo.

. Примите также во внимание, что при работе с объектами, подобными Bean-объектам в kotlin, вы можете использовать класс данных (https://kotlinlang.org/docs/reference/data-classes.html) чтобы не писать столько шаблонов. Делая:

data class BeanDemo(var MyAppDatabase: AppDatabase? = null) : Serializable()

Вы получаете среди прочего: сеттеры, геттеры, equals (), hashCode () и toString () разумные реализации.

Также, если вы работаете с Android, рассмотрите возможность использования Parcelable и «Kotlin Android Extensions» (документация здесь: https://kotlinlang.org/docs/tutorials/android-plugin.html) для работы с Bundles.

...