2017-05-10 36 views
-2

我使用亂射,我可以得到respose從URL.Response的JSONObject是這樣 This is response如何在Android中的活動之間傳遞大量數據(JSON)?

我有一個疑難問題想activities.What之間傳遞這個數據是正確的方法是什麼? 我使用領域database.I插入這個json在我的數據庫和另一個activiti,我選擇這個json.Is這正確的方式? 問題是,加載完成後,第二個活動不會立即開始。 這是我的Java代碼

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(); 
            } 


           } 
          }); 


         } 

它是一個可以立即開始第二次活動,當我有這樣大的數據? 感謝

+0

是否必須保持數據離線?如果你在單個數組列表中管理這些數據會怎麼樣? –

+0

可能的重複http://stackoverflow.com/questions/12819617/issue-passing-large-data-to-second-activity – RameshJaga

+0

我正在使用Realm @IntelliJAmiya – BekaKK

回答

0

您應該在後臺線程上執行事務。

    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); 
          } 
         }); 

然後,您可以在其他活動中通過ID查詢此對象。

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

您是在主線程中執行的境界操作,並且將落後的佈局,所以我建議你把這些數據在

排球的節省響應法 + 類 + 製作的ArrayList創建模型與您的模型類 + 然後通過一個活動的意圖通過它

它會比REALM DB更快。

+0

如果你在intent之間傳遞arraylists的數據,因此創建非託管你的數據副本,那麼你沒有意義使用Realm作爲數據庫 – EpicPandaForce

+0

是的,但我給了他建議,以避免使用Realm。因爲這種情況可以通過ArrayList輕鬆管理。 –

+0

'是的,但我給他建議,以避免使用領域.'但他**是**使用領域,在這種情況下,你不應該避免它?另外,您不應該在活動之間發送大量數據,因爲您可以對事務處理過多的異常限制。 – EpicPandaForce

相關問題