Java 分配数组期间的IndexOutOfBoundsException
我正在用android做一个时间管理应用程序,其中包括活动和标签类。每个活动都有一个标记,在统计片段中,我想使用以下信息制作一个饼图:用户使用特定标记进行了多少活动。因此,我已将achartengine库包含到我的项目中,我确信它可以工作(使用默认输入进行了尝试),但ı需要用户输入的信息。因此,我获取了这些信息,并尝试在我创建的数组中分配这些信息,但在for循环的这个过程中,我发现了一个错误=> 12-21 22:56:47.330 6861-6861/com.beter.timehole E/AndroidRuntime: 致命异常:主 进程:com.beter.timehole,PID:6861 java.lang.ArrayIndexOutOfBoundsException:长度=2;指数=2 在 com.beter.timehole.fragments.StatisticsFragment.initData(StatisticsFragment.java:112) 因此,我展示了for循环中的异常点,感谢您的帮助Java 分配数组期间的IndexOutOfBoundsException,java,android,Java,Android,我正在用android做一个时间管理应用程序,其中包括活动和标签类。每个活动都有一个标记,在统计片段中,我想使用以下信息制作一个饼图:用户使用特定标记进行了多少活动。因此,我已将achartengine库包含到我的项目中,我确信它可以工作(使用默认输入进行了尝试),但ı需要用户输入的信息。因此,我获取了这些信息,并尝试在我创建的数组中分配这些信息,但在for循环的这个过程中,我发现了一个错误=> 12-21 22:56:47.330 6861-6861/com.beter.timehole E/
package com.beter.timehole.fragments;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.Toast;
import org.achartengine.ChartFactory;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.SeriesSelection;
import org.achartengine.renderer.DefaultRenderer;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.DefaultRenderer;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import com.beter.timehole.R;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
public class StatisticsFragment extends Fragment {
private View mView;
private GraphicalView mGraphView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.statistics_fragment, container, false);
mView = rootView;
initData();
return rootView;
}
private void initData() {
ArrayList<com.beter.timehole.core.Activity> activitiesArrayList = new ArrayList<com.beter.timehole.core.Activity>();
activitiesArrayList = readActivitiesFromFile();
ArrayList<String> temp = new ArrayList<String>();
int tagNumber=0;
for(int i=0;i<activitiesArrayList.size();i++)
{
if(i==0) {
temp.add(activitiesArrayList.get(i).getTag().getTagName());
tagNumber ++;
}
else if(temp.contains(activitiesArrayList.get(i).getTag().getTagName()))
{}
else
{
temp.add(activitiesArrayList.get(i).getTag().getTagName());
tagNumber ++;
}
}
String[] codename = new String[tagNumber];
Double[] values = new Double[tagNumber];
String[] colors = new String[tagNumber];
int j=1;
for(int i=0;i<activitiesArrayList.size();i++)
{
if(codename.length == 0) {
codename[0] = activitiesArrayList.get(i).getTag().getTagName();
values[0]=1.0;
}
else if(Arrays.asList(codename).contains(activitiesArrayList.get(i).getTag().getTagName()))
{
int index = java.util.Arrays.asList(codename).indexOf(activitiesArrayList.get(i).getTag().getTagName());
values[index]=values[index]+1;
}
else {
codename[j] = activitiesArrayList.get(i).getTag().getTagName();// It is where the error points(line no:112)
int index = java.util.Arrays.asList(codename).indexOf(activitiesArrayList.get(i).getTag().getTagName());
values[index]=1.0;
j++;
}
}
for(int i=0; i<codename.length;i++)
{
int integer =(int) (Math.random()*1000000);
String color = "#" + integer;
colors[i]= color;
}
CategorySeries series = new CategorySeries("Android Platform Version");
int length = codename.length;
for (int i = 0; i < length; i++)
series.add(codename[i], values[i]);
DefaultRenderer renderer = new DefaultRenderer();
for (int i = 0; i < length; i++) {
SimpleSeriesRenderer seriesRenderer = new SimpleSeriesRenderer();
seriesRenderer.setColor(Color.parseColor(colors[i]));
renderer.addSeriesRenderer(seriesRenderer);
}
renderer.setChartTitleTextSize(60);
renderer.setChartTitle("Android Platform Version");
renderer.setLabelsTextSize(30);
renderer.setLabelsColor(Color.GRAY);
renderer.setLegendTextSize(30);
drawChart(series, renderer);
}
private ArrayList<com.beter.timehole.core.Activity> readActivitiesFromFile(){
ArrayList<com.beter.timehole.core.Activity> activitiesFromFile = new ArrayList<>();
try{
FileInputStream activityFileInputStream = getContext().openFileInput("activityobjects.dat");
ObjectInputStream activityObjectInputStream = new ObjectInputStream(activityFileInputStream);
activitiesFromFile = (ArrayList<com.beter.timehole.core.Activity>)activityObjectInputStream.readObject();
activityObjectInputStream.close();
activityFileInputStream.close();
}
catch (Exception e){
e.printStackTrace();
}
return activitiesFromFile;
}
private void drawChart(CategorySeries series, DefaultRenderer renderer) {
if (null == mGraphView) {
mGraphView = ChartFactory.getPieChartView(getActivity(), series, renderer);
RelativeLayout container = (RelativeLayout) mView.findViewById(R.id.graph_container);
container.addView(mGraphView);
}
else
mGraphView.repaint();
}
}
包com.beter.timehole.fragments;
导入android.os.Bundle;
导入android.support.annotation.Nullable;
导入android.support.v4.app.Fragment;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.app.Activity;
导入android.graphics.Color;
导入android.graphics.Paint.Align;
导入android.graphics.Typeface;
导入android.os.Bundle;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.AbsListView;
导入android.widget.Button;
导入android.widget.LinearLayout;
导入android.widget.RelativeLayout;
导入android.widget.Toast;
导入org.achartengine.ChartFactory;
导入org.achartengine.chart.BarChart.Type;
导入org.achartengine.model.xymultiplesseriesdataset;
导入org.achartengine.model.XYSeries;
导入org.achartengine.renderer.XYMultipleSeriesRenderer;
导入org.achartengine.renderer.XYSeriesRenderer;
导入org.achartengine.ChartFactory;
导入org.achartengine.GraphicalView;
导入org.achartengine.model.CategorySeries;
导入org.achartengine.model.SeriesSelection;
导入org.achartengine.renderer.DefaultRenderer;
导入org.achartengine.renderer.SimpleSeriesRenderer;
导入org.achartengine.ChartFactory;
导入org.achartengine.GraphicalView;
导入org.achartengine.chart.BarChart.Type;
导入org.achartengine.model.CategorySeries;
导入org.achartengine.model.xymultiplesseriesdataset;
导入org.achartengine.model.XYSeries;
导入org.achartengine.renderer.DefaultRenderer;
导入org.achartengine.renderer.SimpleSeriesRenderer;
导入org.achartengine.renderer.XYMultipleSeriesRenderer;
导入org.achartengine.renderer.XYSeriesRenderer;
导入com.beter.timehole.R;
导入java.io.FileInputStream;
导入java.io.ObjectInputStream;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.Random;
公共类统计片段扩展片段{
私有视图;
私有图形视图;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图根视图=充气机。充气(R.layout.statistics\u片段,容器,false);
mView=rootView;
initData();
返回rootView;
}
私有void initData(){
ArrayList活动ArrayList=新建ArrayList();
activitiesArrayList=readActivitiesFromFile();
ArrayList temp=新的ArrayList();
int tagNumber=0;
对于(int i=0;i问题似乎很简单。索引指向arraylist之外。您可以使用迭代器模式来帮助避免边界外异常,但除此之外,我建议只在异常点处发出断点,并确保比较正确的值以发出数组结束的信号。Ac根据您的错误消息,您似乎正在尝试访问第三个位置(索引2
)在codename
数组中,但是codename
的大小仅为2
。这真的取决于您逐步完成您的程序,并找出发生这种情况的原因。是的,我知道,但我无法找出原因,而且这个项目是为明天准备的,所以我想这可能是另一个我看不到的问题,并决定将其上传到这里。但是我仍然在考虑这个问题,如果有人能帮助我,那就太好了。谢谢。你为什么要设置j=1,codename.length=activitiesArrayList.size()+1呢?