Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 分配数组期间的IndexOutOfBoundsException_Java_Android - Fatal编程技术网

Java 分配数组期间的IndexOutOfBoundsException

Java 分配数组期间的IndexOutOfBoundsException,java,android,Java,Android,我正在用android做一个时间管理应用程序,其中包括活动和标签类。每个活动都有一个标记,在统计片段中,我想使用以下信息制作一个饼图:用户使用特定标记进行了多少活动。因此,我已将achartengine库包含到我的项目中,我确信它可以工作(使用默认输入进行了尝试),但ı需要用户输入的信息。因此,我获取了这些信息,并尝试在我创建的数组中分配这些信息,但在for循环的这个过程中,我发现了一个错误=> 12-21 22:56:47.330 6861-6861/com.beter.timehole E/

我正在用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循环中的异常点,感谢您的帮助

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呢?