Search code examples
androidjsonandroid-activityrealm

How to pass large data(JSON) between activities in Android?


I'm using Volley and i can get respose from URL.Response jsonObject is like this This is response

I have one problem.I want to pass this data between activities.What is correct way? I'm using realm database.I inserted this json in my database and another activiti,i select this json.Is this correct way? Problem is that,when loading has finish,second activity not starting immediately. This is my java code

 getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {

                            realm.executeTransaction(new Realm.Transaction() {
                                @Override
                                public void execute(Realm realm) {
                                    TrainMainDBModel trainMainDBModel = realm.createObject(TrainMainDBModel.class);
                                    try {
                                        trainMainDBModel.setTrainsJson(jsonObject.getString("data"));
                                        trainMainDBModel.setAdults(Integer.parseInt(adultsValue.getText().toString()));
                                        trainMainDBModel.setChild(Integer.parseInt(childValue.getText().toString()));

                                        realm.insertOrUpdate(trainMainDBModel); 
                                        Intent intent = new Intent(getActivity(), TrainsActivity.class);

                                        startActivity(intent);
                                        getActivity().overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
                                    } catch (JSONException e) {
                                        e.printStackTrace();
                                    }


                                }
                            });


                        }

Is it a possible to start second activity immediately,when i have like this large data? thanks


Solution

  • You should execute the transaction on a background thread.

                       realm.executeTransactionAsync(new Realm.Transaction() {
                                @Override
                                public void execute(Realm realm) {
                                    TrainMainDBModel trainMainDBModel = realm.createObject(TrainMainDBModel.class);
                                    try {
                                        trainMainDBModel.setTrainsJson(jsonObject.getString("data"));
                                        trainMainDBModel.setAdults(Integer.parseInt(adultsValue.getText().toString()));
                                        trainMainDBModel.setChild(Integer.parseInt(childValue.getText().toString()));
                                    } catch (JSONException e) {
                                        e.printStackTrace();
                                    }
    
    
                                }
                            }, new Realm.Transaction.OnSuccess() {
                                @Override
                                public void onSuccess() {
                                     Intent intent = new Intent(getActivity(), TrainsActivity.class);
                                     startActivity(intent);    
                                     getActivity().overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
                                }
                            });
    

    Then you can query this object by ID in the other activity.

      TrainMainDBModel trainMainDbModel = realm.where(TrainMainDBModel.class)
                                               .equalTo("id", getIntent().getExtras().getInt("trainId"))
                                               .findFirst();