不兼容的类型:ArrayList <entry>无法转换为List <pieentry>

时间:2017-01-05 23:09:48

标签: java android arraylist pie-chart mpandroidchart

我想用PieChart制作一个应用程序。 我做了两个申请。一切都是正确的。但是,如果我将代码复制到第二个,我有

Error:(95, 48) error: incompatible types: ArrayList<Entry> cannot be converted to List<PieEntry>

这是我在工作应用程序中的mainActivity的代码:

public class MainActivity extends AppCompatActivity {

    float zmienna = 123;
    private static String TAG = "MainActivity";

    private float[] yData = {zmienna, 10.6f, 66.76f, 44.32f, 46.01f, 16.89f, 23.9f};

    PieChart pieChart;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "onCreate: starting to create chart");

        pieChart = (PieChart) findViewById(R.id.graph);

        pieChart.setRotationEnabled(true);
        pieChart.setHoleRadius(25f);
        pieChart.setTransparentCircleAlpha(0);

        pieChart.setCenterTextSize(10);

        addDataSet();

    }

    private void addDataSet() {
        Log.d(TAG, "addDataSet started");
        ArrayList<PieEntry> yEntrys = new ArrayList<>();

        for(int i = 0; i < yData.length; i++){
            yEntrys.add(new PieEntry(yData[i] , i));
        }

        //create the data set
        PieDataSet pieDataSet = new PieDataSet(yEntrys, "Employee Sales");
        pieDataSet.setSliceSpace(2);
        pieDataSet.setValueTextSize(12);

        //create pie data object
        PieData pieData = new PieData(pieDataSet);
        pieChart.setData(pieData);
        pieChart.invalidate();
    }
}

第二个应用程序代码是相同的。但是错误符合

PieDataSet pieDataSet = new PieDataSet(yEntrys, "Employee Sales");

写下:

Error:(95, 48) error: incompatible types: ArrayList<Entry> cannot be converted to List<PieEntry>

请帮忙 因为我真的不知道。这两个应用程序发生了什么。

2 个答案:

答案 0 :(得分:0)

注意到代码块是一个有效的代码块。

您在“第二次申请时”遇到的问题是

yEntrys期待ArrayList<Entry>时,List<PieEntry>的类型为ArrayList<PieEntry> yEntrys = new ArrayList<>();。尝试在第二个应用程序中将yEntries更改为<script type="text/javascript"> <!---Calculation---> $(document).ready(function(){ var o = 0; o=o+0; for(o; o<=100; 0++){ var price=$("#price").html(); var i=1; var add; var subtr; var qty; $('#add').click(function(){ qty = $('#pro_qty').val(); add = Number(qty) + Number(i); result= Number(price)* (Number(qty) + Number(i)); $('#pro_qty').val(add); $('.result').html(result); }); $('#subtr').click(function(){ if(qty>1){ all_price=$('.result').text(); result=Number(all_price)- Number(price); qty=$('#pro_qty').val(); subtr = Number(qty)-1; $('.result').html(result); $('#pro_qty').val(subtr); }else{ $('#pro_qty').val(1); $('.result').html(price); } }); } }); </script> ,这应该可以解决您的问题。

另请参阅docs以获取更多信息。

如果没有,请发布不工作的活动

答案 1 :(得分:0)

您可以更改PieDataSet的构造函数,以便第一个参数的类型为List<? extends Entry>,而不是List<Entry>

如果您这样做,您就可以向其传递ArrayList<Entry>ArrayList<PieEntry>,并且您的应用程序的两个版本都可以使用。当然,我假设PieEntryEntry的子类型。