I have a json file which contains a large size of data such as place id, latitude, longitude and date. I want to pass this data from one activity to another. When I am doing this same with Intent the app shows error. How to pass data using a database? I have to pull json file from server.When i pull data, i want to create a database table and pass data to another activity.
public class ExampleActivity extends AppCompatActivity {
EditText collDate;
Button pullGPSData;
SharedPreferences shp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_track_example);
collDate = findViewById(R.id.collection_date);
pullGPSData = findViewById(R.id.pull_track_data);
}
public void listeners(View view) {
switch (view.getId()) {
case R.id.pull_track_data: {
try {
String collectionDateString = collectionDate.getText().toString();
GPSDetail gpsDetail = new GPSDetail();
SharedPreferences shp = getSharedPreferences(Const.Shared_Pref_name, MODE_PRIVATE);
DbHelper dbHelper = new DbHelper(this);
Calendar cal = Calendar.getInstance();
Date todayDate = cal.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String todayDateString = sdf.format(todayDate);
if ( !todayDateString.equals(collectionDateString)) {
JSONObject jsonObjectKeyValue = new JSONObject();
jsonObjectKeyValue.put("keyValue", Const.AUTH_KEY_VALUE);
JSONArray jsonArray = new JSONArray();
jsonArray.put(jsonObjectKeyValue);
JSONObject jsonObject = new JSONObject();
jsonObject.put("AuthKey", jsonArray);
jsonObject.put("EmployeeCode",shp.getString(Const.Shp_Agent_Id,""));
jsonObject.put("FromDate", collectionDateString);
JSONObject gpsDetailsObj = new JSONObject();
gpsDetailsObj.put("gpstrackdetails", jsonObject);
Log.d("LogGPSTrack Details",gpsDetailsObj.toString());
new PullGPSTrackDetailsTask(this, gpsDetailsObj).execute();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
break;
}
}
private static class PullGPSTrackDetailsTask extends AsyncTask<String, String, String> {
WeakReference<ExampleActivity> context;
Dialog pd;
OkHttpClient okHttpClient;
String url;
Request request;
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
List<GPSDetail> gpsDetailList;
DbHelper dbHelper;
JSONObject jsonObject;
JSONObject resultJson;
String resultString;
public PullGPSTrackDetailsTask(ExampleActivity contextObj, JSONObject gpsDetailsObj) {
this.context = new WeakReference<>(contextObj);
this.jsonObject = gpsDetailsObj;
okHttpClient = new OkHttpClient.Builder()
.connectTimeout(180,TimeUnit.SECONDS)
.readTimeout(180,TimeUnit.SECONDS)
.callTimeout(180,TimeUnit.SECONDS)
.build();
// pd = Fns.getProgressDialogLottie(context.get());
pd = new ProgressDialog(contextObj);
pd.setTitle("Please Wait");
pd.setCancelable(false);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pd.show();
}
@Override
protected String doInBackground(String... strings) {
try {
url = USING_IP + URL_GET_GPS;
request = new Request.Builder()
//.header("X-Client-Type", "Android")
.url(url)
.post(body)
.build();
Response response = okHttpClient.newCall(request).execute();
if (!response.isSuccessful()) {
return "failure";
}
resultString = response.body().string();
Log.e("LogresultString", resultString); //
} catch (Exception e) {
Log.e("Log", "Exception", e);
return "failure";
}
return "success";
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
pd.dismiss();
if (s.equals("success")) {
Intent intent = new Intent(context.get(), ExampleSecondActivity.class);
intent.putExtra("value", resultString);
context.get().startActivity(intent);
Log.d("LogIntent",String.valueOf(intent));
} else if (s.equals("failure")) {
Toast.makeText(context.get(), "Pull Failed", Toast.LENGTH_LONG).show();
}
}
}
}
My json
{
"GPS Track Details": [
{
"id": 1280,
"Longitude": -122.084,
"Latitude": 37.422,
"Date": "2020-08-21"
},
{
"id": 1232,
"Longitude": -121.023,
"Latitude": 37.302,
"Date": "2020-08-21"
},
{
"id": 1213,
"Longitude": -121.037,
"Latitude": 37.300,
"Date": "2020-08-21"
},
{
"id": 1226,
"Longitude": -120.098,
"Latitude": 37.422,
"Date": "2020-08-21"
},
.....
.....
]
}
My Logcat
E/JavaBinder: !!! FAILED BINDER TRANSACTION !!! (parcel size = 5834308)
D/AndroidRuntime: Shutting down VM
E/CustomActivityOnCrash: App has crashed, executing CustomActivityOnCrash's UncaughtExceptionHandler
java.lang.RuntimeException: Failure from system
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1525)
at android.app.Activity.startActivityForResult(Activity.java:4224)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:676)
at android.app.Activity.startActivityForResult(Activity.java:4183)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:663)
at android.app.Activity.startActivity(Activity.java:4507)
at android.app.Activity.startActivity(Activity.java:4475)
at android.os.AsyncTask.finish(AsyncTask.java:660)
at android.os.AsyncTask.-wrap1(AsyncTask.java)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:677)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
Caused by: android.os.TransactionTooLargeException: data parcel size 5834308 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:615)
at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3070)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1518)
at android.app.Activity.startActivityForResult(Activity.java:4224)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:676)
at android.app.Activity.startActivityForResult(Activity.java:4183)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:663)
at android.app.Activity.startActivity(Activity.java:4507)
at android.app.Activity.startActivity(Activity.java:4475)
at android.os.AsyncTask.finish(AsyncTask.java:660)
at android.os.AsyncTask.-wrap1(AsyncTask.java)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:677)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)