Android solve java.lang.IndexOutOfBoundsException:索引0无效,大小为0?
我有一个使用MpAndroidchart库的折线图,我想使用myphp/mysql服务器中的一些数据向它添加元素 现在的问题是我正在尝试获取id,所以我正在向服务器发送请求并尝试获取id,其响应是Android solve java.lang.IndexOutOfBoundsException:索引0无效,大小为0?,android,indexoutofboundsexception,Android,Indexoutofboundsexception,我有一个使用MpAndroidchart库的折线图,我想使用myphp/mysql服务器中的一些数据向它添加元素 现在的问题是我正在尝试获取id,所以我正在向服务器发送请求并尝试获取id,其响应是 [{"id":"1","username":"jena@gmail.com","password":"123"},{"id":"2","username":"test@gmail.com","password":"1234"},{"id":"3","username":"test2@gmail.com
[{"id":"1","username":"jena@gmail.com","password":"123"},{"id":"2","username":"test@gmail.com","password":"1234"},{"id":"3","username":"test2@gmail.com","password":"12345"},{"id":"4","username":"test3@gmail.com","password":"123456"},{"id":"5","username":"test4@gmail.com","password":"1234567"},{"id":"6","username":"test3@gmail.com","password":"12345678"},{"id":"7","username":"test3@gmail.com","password":"123456789"}]
但不幸的是,IndexOutOfBoundsException会引发异常,尽管arraylist不是空的,因为我用listview检查了它
我的主要活动
public class testActivity extends Activity {
private static final String TAG = "ChartActivity";
private LineChart mChart;
private BarChart barChart;
private ScatterChart scatterChart;
private BubbleChart bubbleChart;
private PieChart pieChart;
Context c;
ArrayList<Integer> tr=new ArrayList<>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chart);
c = this.getApplicationContext();
mChart = (LineChart) findViewById(R.id.linechart);
//mChart.setOnChartGestureListener(ChartActivity.this);
//mChart.setOnChartValueSelectedListener(ChartActivity.this);
mChart.setDragEnabled(true);
mChart.setScaleEnabled(false);
LimitLine upper_limit = new LimitLine(65f, "Danger");
upper_limit.setLineWidth(4f);
upper_limit.enableDashedLine(10f, 10f, 0);
upper_limit.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_TOP);
upper_limit.setTextSize(15f);
LimitLine lower_limit = new LimitLine(35f, "too low");
upper_limit.setLineWidth(4f);
upper_limit.enableDashedLine(10f, 10f, 0);
upper_limit.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_BOTTOM);
upper_limit.setTextSize(15f);
YAxis leftAxis = mChart.getAxisLeft();
leftAxis.removeAllLimitLines();
leftAxis.addLimitLine(upper_limit);
leftAxis.addLimitLine(lower_limit);
leftAxis.setAxisMaximum(100f);
leftAxis.setAxisMinimum(25f);
leftAxis.enableGridDashedLine(10f, 10f, 0);
leftAxis.setDrawLimitLinesBehindData(true);
mChart.getAxisRight().setEnabled(false);
downloadChart d=new downloadChart(c,url);
d.execute();
ArrayList<Entry> yValues = new ArrayList<>();
if(tr!=null && tr.size()!=0){
tr.addAll(parseChart.players);
for (int i = 0; i < tr.size(); i++) {
yValues.add(new Entry(tr.get(i), i));
}
}
LineDataSet set1 = new LineDataSet(yValues, "Data set 1");
set1.setFillAlpha(110);
set1.setColor(Color.RED);
set1.setLineWidth(3f);
set1.setValueTextSize(10f);
ArrayList<ILineDataSet> dataSets = new ArrayList<>();
dataSets.add(set1);
LineData data = new LineData(dataSets);
mChart.setData(data);
String[] values = {"first", "second", "third", "anything", "testing", "likewise", "finally"};
XAxis xAxis = mChart.getXAxis();
xAxis.setValueFormatter(new MyXAxisValueFormatter(values));
xAxis.setGranularity(1f);
}
public class MyXAxisValueFormatter implements IAxisValueFormatter {
private String[] mValues;
public MyXAxisValueFormatter(String[] values){
this.mValues = values;
}
@Override
public String getFormattedValue(float value, AxisBase axis) {
return mValues[(int)value];
}
}
}
应用程序终止。我使用改装库从服务器获取json数据 它正在工作:) java.lang.IndexOutOfBoundsException:索引:0,大小:0
首先,错误发生在
数据集中
。然后查看您的代码。y值
为空。它会影响结果吗?最后,您的downloadChart
是异步的,因此您的代码
ArrayList<Entry> yValues = new ArrayList<>();
if(tr!=null && tr.size()!=0){
tr.addAll(parseChart.players);
for (int i = 0; i < tr.size(); i++) {
yValues.add(new Entry(tr.get(i), i));
}
}
ArrayList yValues=新的ArrayList();
如果(tr!=null&&tr.size()!=0){
tr.addAll(parseChart.players);
对于(int i=0;i
没有意义,请再次检查代码并确保数据合法,然后进行调试。请发布完整的错误日志请发布(读取?)堆栈跟踪。另外,您不是在使用android studio进行调试吗?最后,IndexOutOfBoundsException并不意味着您的列表为空,而是意味着您超出了范围(即使用大于您的(列表大小-1)或负值的索引),您的列表为空。@farhana但当我使用listview检查时,它不是满的。她说为空,不是满的。
public class parseChart extends AsyncTask<Void,Integer,Integer> {
Context c;
//ListView lv;
String data;
public static ArrayList<Integer> players=new ArrayList<>();
ProgressDialog pd;
public parseChart(Context c, String data) {
this.c = c;
this.data = data;
//this.lv = lv;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pd=new ProgressDialog(c);
pd.setTitle("Parser");
pd.setMessage("Parsing ....Please wait");
//pd.show();
}
@Override
protected Integer doInBackground(Void... params) {
return this.parse();
}
@Override
protected void onPostExecute(Integer integer) {
super.onPostExecute(integer);
if(integer == 1)
{
//ADAPTER
ArrayAdapter<Integer> adapter=new ArrayAdapter<Integer>(c,android.R.layout.simple_list_item_1,players);
//ADAPT TO LISTVIEW
//lv.setAdapter(adapter);
//LISTENET
//copy code
}else
{
Toast.makeText(c,"Unable to Parse",Toast.LENGTH_SHORT).show();
}
pd.dismiss();
}
//PARSE RECEIVED DATA
private int parse()
{
try
{
//ADD THAT DATA TO JSON ARRAY FIRST
JSONArray ja=new JSONArray(data);
//CREATE JO OBJ TO HOLD A SINGLE ITEM
JSONObject jo=null;
players.clear();
//LOOP THRU ARRAY
for(int i=0;i<ja.length();i++)
{
jo=ja.getJSONObject(i);
//RETRIOEVE NAME
String name=jo.getString("id");
//ADD IT TO OUR ARRAYLIST
players.add(Integer.parseInt(name));
}
return 1;
} catch (JSONException e) {
e.printStackTrace();
}
return 0;
}
}
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.android.apptry, PID: 4401
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at com.github.mikephil.charting.data.DataSet.getEntryForIndex(DataSet.java:286)
at com.github.mikephil.charting.utils.Transformer.generateTransformedValuesLine(Transformer.java:184)
at com.github.mikephil.charting.renderer.LineChartRenderer.drawValues(LineChartRenderer.java:547)
at com.github.mikephil.charting.charts.BarLineChartBase.onDraw(BarLineChartBase.java:264)
at android.view.View.draw(View.java:14465)
at android.view.View.getDisplayList(View.java:13362)
at android.view.View.getDisplayList(View.java:13404)
at android.view.View.draw(View.java:14182)
at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
at android.view.View.getDisplayList(View.java:13357)
at android.view.View.getDisplayList(View.java:13404)
at android.view.View.draw(View.java:14182)
at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
at android.view.View.getDisplayList(View.java:13357)
at android.view.View.getDisplayList(View.java:13404)
at android.view.View.draw(View.java:14182)
at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
at android.view.View.draw(View.java:14468)
at com.android.internal.widget.ActionBarOverlayLayout.draw(ActionBarOverlayLayout.java:381)
at android.view.View.getDisplayList(View.java:13362)
at android.view.View.getDisplayList(View.java:13404)
at android.view.View.draw(View.java:14182)
at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
at android.view.View.draw(View.java:14468)
at android.widget.FrameLayout.draw(FrameLayout.java:472)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2326)
at android.view.View.getDisplayList(View.java:13362)
at android.view.View.getDisplayList(View.java:13404)
at android.view.HardwareRenderer$GlRenderer.buildDisplayList(HardwareRenderer.java:1569)
at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1448)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2381)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2253)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1883)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:544)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
if (jsonArray1.length() > 0) {
JSONObject jsonObject2 = jsonArray1.getJSONObject(0);
imageString = jsonObject2.getString("image_org");
}
ArrayList<Entry> yValues = new ArrayList<>();
if(tr!=null && tr.size()!=0){
tr.addAll(parseChart.players);
for (int i = 0; i < tr.size(); i++) {
yValues.add(new Entry(tr.get(i), i));
}
}