Java 使用MPAndroidChart jar在条形字符中的ClassCast表达式

Java 使用MPAndroidChart jar在条形字符中的ClassCast表达式,java,android,android-activity,Java,Android,Android Activity,我是这个网站的新成员,实际上我研究过图表技术,但当我部署并运行这段代码时,会出现类强制转换异常。但代码上没有错误。请任何人帮助我。在下面找到Main活动类和Main.xml public class MainActivity extends Activity { private LinearLayout mainLayout; private PieChart mChart; // we're going to display pie chart for smartphones martket

我是这个网站的新成员,实际上我研究过图表技术,但当我部署并运行这段代码时,会出现类强制转换异常。但代码上没有错误。请任何人帮助我。在下面找到
Main活动类
Main.xml

public class MainActivity extends Activity {
private LinearLayout mainLayout;
private PieChart mChart;
// we're going to display pie chart for smartphones martket shares
private float[] yData = { 5, 10, 15, 30, 40 };
private String[] xData = { "Sony", "Huawei", "LG", "Apple", "Samsung" };

 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainLayout = (LinearLayout) findViewById(R.id.mainLayout);
mChart = new PieChart(this);
// add pie chart to main layout
mainLayout.addView(mChart);
mainLayout.setBackgroundColor(Color.parseColor("#55656C"));

// configure pie chart
mChart.setUsePercentValues(true);
mChart.setDescription("Smartphones Market Share");

// enable hole and configure
mChart.setDrawHoleEnabled(true);
mChart.setHoleColorTransparent(true);
mChart.setHoleRadius(7);
mChart.setTransparentCircleRadius(10);

// enable rotation of the chart by touch
mChart.setRotationAngle(0);
mChart.setRotationEnabled(true);

// set a chart value selected listener
mChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {

  @Override
  public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
    // display msg when value selected
    if (e == null)
      return;

    Toast.makeText(MainActivity.this,
      xData[e.getXIndex()] + " = " + e.getVal() + "%", Toast.LENGTH_SHORT).show();
  }

  @Override
  public void onNothingSelected() {

  }
});

// add data
addData();

// customize legends
Legend l = mChart.getLegend();
l.setPosition(LegendPosition.RIGHT_OF_CHART);
l.setXEntrySpace(7);
l.setYEntrySpace(5);
}

private void addData() {
ArrayList<Entry> yVals1 = new ArrayList<Entry>();

for (int i = 0; i < yData.length; i++)
  yVals1.add(new Entry(yData[i], i));

ArrayList<String> xVals = new ArrayList<String>();

for (int i = 0; i < xData.length; i++)
  xVals.add(xData[i]);

// create pie data set
PieDataSet dataSet = new PieDataSet(yVals1, "Market Share");
dataSet.setSliceSpace(3);
dataSet.setSelectionShift(5);

// add many colors
ArrayList<Integer> colors = new ArrayList<Integer>();

for (int c : ColorTemplate.VORDIPLOM_COLORS)
  colors.add(c);

for (int c : ColorTemplate.JOYFUL_COLORS)
  colors.add(c);

for (int c : ColorTemplate.COLORFUL_COLORS)
  colors.add(c);

for (int c : ColorTemplate.LIBERTY_COLORS)
  colors.add(c);

for (int c : ColorTemplate.PASTEL_COLORS)
  colors.add(c);

colors.add(ColorTemplate.getHoloBlue());
dataSet.setColors(colors);

// instantiate pie data object now
PieData data = new PieData(xVals, dataSet);
data.setValueFormatter(new PercentFormatter());
data.setValueTextSize(11f);
data.setValueTextColor(Color.GRAY);

mChart.setData(data);

// undo all highlights
mChart.highlightValues(null);

// update pie chart
mChart.invalidate();
}

}
公共类MainActivity扩展活动{
私人线路布局主要布局;
私人皮查特·麦克哈特;
//我们将展示智能手机市场份额的饼图
私人浮动[]yData={5,10,15,30,40};
私有字符串[]扩展数据={“索尼”、“华为”、“LG”、“苹果”、“三星”};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainLayout=(LinearLayout)findViewById(R.id.mainLayout);
mChart=新的PieChart(本);
//将饼图添加到主布局
mainLayout.addView(mChart);
mainplayout.setBackgroundColor(Color.parseColor(“#55656C”);
//配置饼图
mChart.setUsePercentValues(真);
mChart.setDescription(“智能手机市场份额”);
//启用孔并配置
mChart.setDrawholeeEnabled(真);
mChart.setHoleColorTransparent(真);
mChart.setHoleRadius(7);
mChart.setTransparentCircleRadius(10);
//通过触摸启用图表的旋转
mChart.设置旋转角度(0);
mChart.setRotationEnabled(真);
//设置所选的图表值
setOnChartValueSelectedListener(新的OnChartValueSelectedListener(){
@凌驾
选定的公共void onvalues(条目e、int-dataSetIndex、高亮显示h){
//选择值时显示消息
如果(e==null)
回来
Toast.makeText(MainActivity.this,
扩展数据[e.getXIndex()]+“=”+e.getVal()+“%”,Toast.LENGTH_SHORT.show();
}
@凌驾
不公开无效已选(){
}
});
//添加数据
addData();
//自定义图例
图例l=mChart.getLegend();
l、 设置位置(图例位置。图表右侧);
l、 setXEntrySpace(7);
l、 setYEntrySpace(5);
}
私有void addData(){
ArrayList yVals1=新的ArrayList();
对于(int i=0;i
和activity_main.xml

 <LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:id="@+id/mainLayout">
</LinearLayout>


但是现在图表的大小非常小,我不知道为什么?我们如何将图表的大小设置得更大。提前感谢

您正在将
线性布局
(xml)转换为
相对布局
(在您的活动中)。当然,您不能这样做,这将导致您描述的异常。

问题似乎来自菜单。您可以在主活动中发布与菜单相关的代码吗?还有res/menu的内容?

请发布异常的stacktrace并标记它所指的行。只需显示java.lang.ClassCastException:android.app.Application以及nullpointer异常致命异常即使我添加了外部JAR作为well@Sva.Mu长官,我已经更新了错误日志,但我也尝试了RelativeLayout你告诉我正确的XML代码。没有正确或错误。但是在你的活动中,你需要转换到你在XML中实际使用的布局类型实际上我在Android中是新手,所以你能告诉我怎么做吗?我已经发布了完整的代码。因为我使用了MPAndroidChart jar,所以菜单类已经建立在这个基础上了。@Philipp:-我已经找到了解决方案。但图表视图非常小。为什么?你们能建议我如何增加图表的大小吗?有人能帮我吗