Я использую библиотеку anychart для android для отображения диаграммы ap ie, она получает данные из mysql, используя залп и node JS api, чтобы облегчить операцию crud
Я просто столкнулся с проблемой обновления диаграммы, когда новые данные доступны из базы данных. Я использовал Log.d, чтобы удостовериться, что данные действительно обновляются, я проверил любые диаграммы github и попробовал решения, которые они перечислили, в основном, что мне просто нужно снова установить данные с новыми данными, которые не работали. Пожалуйста, помогите очень ценится. Я даже пытался создать кнопку и попытаться установить график с полностью новыми и жестко закодированными данными. но это не сработало, я попытался использовать ушел и видим, и это не сработало
вот мой код:
package com.dana.baizaty_frontend.fragments
import Transaction
import android.os.Bundle
import android.provider.ContactsContract
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.Fragment
import com.android.volley.Request
import com.android.volley.Response
import com.android.volley.toolbox.StringRequest
import com.anychart.APIlib
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.enums.Align
import com.anychart.enums.LegendLayout
import com.dana.baizaty_frontend.R
import com.dana.baizaty_frontend.singleton.AppSingleton
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import kotlinx.android.synthetic.main.fragment_pfm.*
class PFM : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// val anyChartView: AnyChartView? = any_chart_view
// Inflate the layout for this fragment
// createChart()
var v = inflater.inflate(R.layout.fragment_pfm, container, false)
return v
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// getTransactions()
button.setOnClickListener{
updateChart()
}
}
override fun onStart() {
super.onStart()
getTransactions()
Toast.makeText(context, "testing", "testing".length).show()
}
fun createChart (data1: MutableList<DataEntry>
) {
// var anyChartView: AnyChartView? = any_chart_view
// APIlib.getInstance().setActiveAnyChartView(any_chart_view)
// any_chart_view.clear()
any_chart_view.visibility=View.GONE
any_chart_view.setProgressBar(progress_bar)
var pie = AnyChart.pie3d()
// anyChartView?.setProgressBar(progress_bar)
// data.add(ValueDataEntry("Restarant", 30))
// data.add(ValueDataEntry("transportation", 23))
// data.add(ValueDataEntry("cafe", 10))
Log.d("catagor3",data1.toString())
pie.data(data1)
pie.title("spending")
pie.labels().position("outside")
pie.legend().title().enabled(true)
pie.legend()
.position("center-bottom")
.itemsLayout(LegendLayout.HORIZONTAL)
.align(Align.CENTER);
any_chart_view?.setChart(pie);
any_chart_view.visibility=View.VISIBLE
data1.clear()
}
fun updateChart(){
var data1 = mutableListOf<DataEntry>()
data1.add(ValueDataEntry("Restarant", 30))
data1.add(ValueDataEntry("transportation", 23))
data1.add(ValueDataEntry("cafe", 10))
var pie=AnyChart.pie3d()
any_chart_view.setChart(pie)
}
fun getTransactions() {
var data = mutableListOf<DataEntry>()
any_chart_view.invalidate()
var queue = AppSingleton.instance.getQueue(context)
var transactionsRequest = StringRequest(
Request.Method.GET,
AppSingleton.instance.getBaseUrl() + "transactions/3",
Response.Listener<String> { response ->
// Success case
var transactionList = Gson().fromJson<List<Transaction>>(response, object :
TypeToken<List<Transaction>>() {}.type)
var catagories = mutableListOf<String>()
var values = mutableListOf<Double>()
transactionList.forEach {
// Log.d("catgor",it.toString())
if (catagories.contains(it.catagorie)) {
var idx = catagories.indexOf(it.catagorie)
// Log.d("catgor1",idx.toString())
// Log.d("catgor2",catagories.toString())
values[idx] += it.amount
}else{
catagories.add(it.catagorie)
values.add(it.amount)
var idx=catagories.indexOf(it.catagorie)
// values[idx]=0.0
}
}
Log.d("catagor",catagories.toString())
Log.d("catagor",values.toString())
catagories.forEach{
var idx=catagories.indexOf(it)
data.add(ValueDataEntry(it,values[idx]))
}
Log.d("catagor3",data.toString())
createChart(data)
data.clear()
Log.d("catagor3",data.toString())
},
Response.ErrorListener {
// Error case
})
queue?.add(transactionsRequest)
}
}
и вот мой xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".fragments.PFM">
<com.anychart.AnyChartView
android:id="@+id/any_chart_view"
android:layout_width="389dp"
android:layout_height="333dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="144dp"
android:layout_marginTop="78dp"
android:text="Button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/any_chart_view" />
</androidx.constraintlayout.widget.ConstraintLayout>