【问题标题】:Passing dataset between activity in MPAndroidChart在 MPAndroidChart 中的活动之间传递数据集
【发布时间】:2018-05-14 16:30:19
【问题描述】:

我想在单击按钮后全屏显示条形图,但在活动之间传递 BarEntry 类时出错。

android.os.ParcelFormatException: Cannot parcel an Entry with non-parcelable data

我的代码:

ArrayList<BarEntry> barEntries = new ArrayList<>();
        barEntries.clear();
        barEntries.add(new BarEntry(0, new float[]{8f, 9f, 10f}, "Jan"));
        barEntries.add(new BarEntry(1, new float[]{11f, 9f, 5f}, "Feb"));
        barEntries.add(new BarEntry(2, new float[]{8f, 3f, 4f}, "Mar"));
        barEntries.add(new BarEntry(3, new float[]{5f, 14f, 2f}, "Apr"));
        barEntries.add(new BarEntry(4, new float[]{5f, 2f, 3f}, "May"));
        barEntries.add(new BarEntry(5, new float[]{2f, 15f, 6f}, "Jun"));
        barEntries.add(new BarEntry(6, new float[]{15f, 2f, 8f}, "Jul"));
        barEntries.add(new BarEntry(7, new float[]{4f, 19f, 4f}, "Aug"));
        barEntries.add(new BarEntry(8, new float[]{5f, 5f, 5f}, "Sept"));
        barEntries.add(new BarEntry(9, new float[]{6f, 6f, 6f}, "Oct"));
        barEntries.add(new BarEntry(10, new float[]{8f, 9f, 10f}, "Nov"));
        barEntries.add(new BarEntry(11, new float[]{2f, 7f, 7f}, "Dec"));
        barEntries.add(new BarEntry(12, new float[]{6f, 2f, 8f}, "Jan"));

Intent bar = new Intent(ChartRevenueActivity.this, FullscreenActivity.class);
                Bundle bundle = new Bundle();
                bundle.putSerializable("barEntries", barEntries);
                bar.putExtra("type", "barChart");
                bar.putExtras(bundle);
                startActivity(bar);

【问题讨论】:

  • 你能修改这个 BarEntry 类的代码吗?
  • @KoustuvGanguly 不,我不能……
  • 要么在 FullscreenActivity 类中创建这个硬编码的 Bar 条目,要么创建一个包含 Bar 条目数据并且是 Parcelable 的数据模型。然后将其传递给您希望的任何活动。
  • 在下面查看我的答案。

标签: android mpandroidchart parcelable


【解决方案1】:

将此库添加到 build.gradle,

compile 'com.google.code.gson:gson:2.8.1'

使用 Gson 将您的 Arraylist 转换为 json 并将 json 字符串传递给新活动。

Intent bar = new Intent(ChartRevenueActivity.this, FullscreenActivity.class);
    bar.putExtra("type", "barChart");
    bar.putExtra("barentry",new Gson().toJson(barEntries));
    startActivity(bar);

像这样在新活动中检索 Arraylist,

 ArrayList<BarEntry> barEntries = 
            new Gson().fromJson(getIntent().getStringExtra("barentry"), new TypeToken<ArrayList<BarEntry>>(){}.getType());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多