So, i have this arraylist add element for MPChartAndroid yValues. I want to for loop add element from database with Retrofit2.
private ArrayList<BarEntry> sehat() {
ArrayList<BarEntry> dataEntries = new ArrayList<>();
dataEntries.add(new BarEntry(1, 2));
dataEntries.add(new BarEntry(2, 1));
dataEntries.add(new BarEntry(3, 1));
dataEntries.add(new BarEntry(4, 4));
dataEntries.add(new BarEntry(5, 3));
dataEntries.add(new BarEntry(6, 7));
dataEntries.add(new BarEntry(7, 7));
dataEntries.add(new BarEntry(8, 3));
dataEntries.add(new BarEntry(9, 7));
dataEntries.add(new BarEntry(10, 7));
return dataEntries;
}
so far what I've done to call get retrofit response data and loop add element. when I loop adding element to arraylist the data didn't showed in chart and when I tried to click app suddenly crased.
private ArrayList<BarEntry> sehat() {
ArrayList<BarEntry> dataEntries = new ArrayList<>();
Call<List<Data>> call = userService.getDataArr();
call.enqueue(new Callback<List<Data>>() {
@Override
public void onResponse(Call<List<Data>> call, Response<List<Data>> response) {
List<Data> data = response.body();
int i = 0;
int yVal[] = new int[data.size()];
for(Data get: data){
yVal[i] = get.getCnrp();
dataEntries.add(new BarEntry(i, yVal[i]));
i++;
Log.d("testing", " " + yVal);
}
}
@Override
public void onFailure(Call<List<Data>> call, Throwable t) {
}
});
return dataEntries;
}
Error that I got when it crashed always said length=0; index=0, but when I Log.d it's return right data.
2020-07-21 16:59:29.453 15766-15766/com.example.baseapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.baseapplication, PID: 15766
java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
at com.github.mikephil.charting.buffer.BarBuffer.addBar(BarBuffer.java:37)
at com.github.mikephil.charting.buffer.BarBuffer.feed(BarBuffer.java:80)
at com.github.mikephil.charting.renderer.BarChartRenderer.drawDataSet(BarChartRenderer.java:142)
at com.github.mikephil.charting.renderer.BarChartRenderer.drawData(BarChartRenderer.java:80)
at com.github.mikephil.charting.charts.BarLineChartBase.onDraw(BarLineChartBase.java:232)
at android.view.View.draw(View.java:20207)
at android.view.View.updateDisplayListIfDirty(View.java:19082)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4317)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4290)
at android.view.View.updateDisplayListIfDirty(View.java:19042)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4317)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4290)
at android.view.View.updateDisplayListIfDirty(View.java:19042)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4317)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4290)
at android.view.View.updateDisplayListIfDirty(View.java:19042)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4317)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4290)
at android.view.View.updateDisplayListIfDirty(View.java:19042)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4317)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4290)
at android.view.View.updateDisplayListIfDirty(View.java:19042)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4317)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4290)
at android.view.View.updateDisplayListIfDirty(View.java:19042)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:686)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:692)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:801)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:3311)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3115)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2484)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
at android.view.Choreographer.doCallbacks(Choreographer.java:761)
at android.view.Choreographer.doFrame(Choreographer.java:696)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
I appreciate any help.
So I've been struggling for a few days to find a solution to my problem and here I am.
Make a new method to called retrofit response.
public void getData(){
Call<BaChart> call = userService.init();
call.enqueue(new Callback<BaChart>() {
@Override
public void onResponse(Call<BaChart> call, Response<BaChart> response) {
BaChart baChart = response.body();
int i;
ArrayList<BarEntry> sehat= new ArrayList<>();
for( i = 0; i < baChart.getTidakSehat().size(); i++ ){
BarEntry value = new BarEntry(i, 0);
sehat.add(value);
}
//do stuff with arraylist
}
@Override
public void onFailure(Call<BaChart> call, Throwable t) {
}
});
}
Inside response after assigned response.body()
, do for loop to add element in arraylist.