Reputation: 106
I wanted to use AnyChart's Line Chart to draw data from Firebase's realtime db but I can't seem to make it work... I have been trying to use the sample code which is given and it can't seem to appear, the code seems to compile fine but the chart does not appear... Can't seem to find what's going on. I can expect it to be a very simple error, but my knowledge with android is really basic and with AnyChart is null...
Here you have the activity were I'm trying to implement the sample of the linear chart:
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import com.anychart.AnyChart;
import com.anychart.AnyChartView;
import com.anychart.chart.common.dataentry.DataEntry;
import com.anychart.chart.common.dataentry.ValueDataEntry;
import com.anychart.charts.Cartesian;
import com.anychart.core.cartesian.series.Line;
import com.anychart.data.Mapping;
import com.anychart.data.Set;
import com.anychart.enums.Anchor;
import com.anychart.enums.MarkerType;
import com.anychart.enums.TooltipPositionMode;
import com.anychart.graphics.vector.Stroke;
import java.util.ArrayList;
import java.util.List;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
public class Activity2 extends AppCompatActivity {
private FirebaseDatabase database = FirebaseDatabase.getInstance();
private int fieldNum;
TextView tvFieldNum;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_2);
Intent cameFromAct1=getIntent();
fieldNum = Integer.parseInt(cameFromAct1.getStringExtra("fieldNum"));
String fieldName = "Campo"+fieldNum+"".trim();
//tvFieldNum=(TextView)findViewById(R.id.tvFieldNum);
//tvFieldNum.setText(fieldNum+"");
AnyChartView anyChartView = findViewById(R.id.any_chart_view);
anyChartView.setProgressBar(findViewById(R.id.progress_bar));
Cartesian cartesian = AnyChart.line();
cartesian.animation(true);
cartesian.padding(10d, 20d, 5d, 20d);
cartesian.crosshair().enabled(true);
cartesian.crosshair()
.yLabel(true)
.yStroke("#000000",1.5,"10.5","1","1");
//.yStroke((Stroke) null, 1.5, null, (String) null, (String) null);
cartesian.tooltip().positionMode(TooltipPositionMode.POINT);
cartesian.title("Trend of Sales of the Most Popular Products of ACME Corp.");
cartesian.yAxis(0).title("Number of Bottles Sold (thousands)");
cartesian.xAxis(0).labels().padding(5d, 5d, 5d, 5d);
List<DataEntry> seriesData = new ArrayList<>();
seriesData.add(new CustomDataEntry("1986", 3.6, 2.3, 2.8));
seriesData.add(new CustomDataEntry("1987", 7.1, 4.0, 4.1));
seriesData.add(new CustomDataEntry("1988", 8.5, 6.2, 5.1));
seriesData.add(new CustomDataEntry("1989", 9.2, 11.8, 6.5));
seriesData.add(new CustomDataEntry("1990", 10.1, 13.0, 12.5));
seriesData.add(new CustomDataEntry("1991", 11.6, 13.9, 18.0));
seriesData.add(new CustomDataEntry("1992", 16.4, 18.0, 21.0));
seriesData.add(new CustomDataEntry("1993", 18.0, 23.3, 20.3));
seriesData.add(new CustomDataEntry("1994", 13.2, 24.7, 19.2));
seriesData.add(new CustomDataEntry("1995", 12.0, 18.0, 14.4));
seriesData.add(new CustomDataEntry("1996", 3.2, 15.1, 9.2));
seriesData.add(new CustomDataEntry("1997", 4.1, 11.3, 5.9));
seriesData.add(new CustomDataEntry("1998", 6.3, 14.2, 5.2));
seriesData.add(new CustomDataEntry("1999", 9.4, 13.7, 4.7));
seriesData.add(new CustomDataEntry("2000", 11.5, 9.9, 4.2));
seriesData.add(new CustomDataEntry("2001", 13.5, 12.1, 1.2));
seriesData.add(new CustomDataEntry("2002", 14.8, 13.5, 5.4));
seriesData.add(new CustomDataEntry("2003", 16.6, 15.1, 6.3));
seriesData.add(new CustomDataEntry("2004", 18.1, 17.9, 8.9));
seriesData.add(new CustomDataEntry("2005", 17.0, 18.9, 10.1));
seriesData.add(new CustomDataEntry("2006", 16.6, 20.3, 11.5));
seriesData.add(new CustomDataEntry("2007", 14.1, 20.7, 12.2));
seriesData.add(new CustomDataEntry("2008", 15.7, 21.6, 10));
seriesData.add(new CustomDataEntry("2009", 12.0, 22.5, 8.9));
Set set = Set.instantiate();
set.data(seriesData);
Mapping series1Mapping = set.mapAs("{ x: 'x', value: 'value' }");
Mapping series2Mapping = set.mapAs("{ x: 'x', value: 'value2' }");
Mapping series3Mapping = set.mapAs("{ x: 'x', value: 'value3' }");
Line series1 = cartesian.line(series1Mapping);
series1.name("Brandy");
series1.hovered().markers().enabled(true);
series1.hovered().markers()
.type(MarkerType.CIRCLE)
.size(4d);
series1.tooltip()
.position("right")
.anchor(Anchor.LEFT_CENTER)
.offsetX(5d)
.offsetY(5d);
Line series2 = cartesian.line(series2Mapping);
series2.name("Whiskey");
series2.hovered().markers().enabled(true);
series2.hovered().markers()
.type(MarkerType.CIRCLE)
.size(4d);
series2.tooltip()
.position("right")
.anchor(Anchor.LEFT_CENTER)
.offsetX(5d)
.offsetY(5d);
Line series3 = cartesian.line(series3Mapping);
series3.name("Tequila");
series3.hovered().markers().enabled(true);
series3.hovered().markers()
.type(MarkerType.CIRCLE)
.size(4d);
series3.tooltip()
.position("right")
.anchor(Anchor.LEFT_CENTER)
.offsetX(5d)
.offsetY(5d);
cartesian.legend().enabled(true);
cartesian.legend().fontSize(13d);
cartesian.legend().padding(0d, 0d, 10d, 0d);
anyChartView.setChart(cartesian);
}
private class CustomDataEntry extends ValueDataEntry {
CustomDataEntry(String x, Number value, Number value2, Number value3) {
super(x, value);
setValue("value2", value2);
setValue("value3", value3);
}
}
}
And here you have my XML file from that activity
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Activity2"
android:background="@drawable/background">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.anychart.AnyChartView
android:layout_weight="1"
android:id="@+id/any_chart_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ProgressBar
android:layout_weight="1"
android:id="@+id/progress_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>```
Upvotes: 0
Views: 2121
Reputation: 3905
There's a lack of some attributes in the XML, also try to not use ScrollView. As reference, check the XML snippet and activity code in the Quick Start Guide.
Upvotes: 2