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:-我已经找到了解决方案。但图表视图非常小。为什么?你们能建议我如何增加图表的大小吗?有人能帮我吗