AnyChart android刷新图表

AnyChart android刷新图表,android,kotlin,anychart,Android,Kotlin,Anychart,我使用android的anychart库来显示饼图,它使用volley和NodeJSAPI从mysql获取数据,以方便crud操作 当数据库中有新数据可用时,我正面临重新绘制图表的问题。 我使用Log.d来确保数据确实在更新它,我检查了anycharts github并尝试了他们列出的解决方案,主要是我只需要用新数据重新设置数据,但没有成功 非常感谢您的帮助。 我甚至尝试创建一个按钮,并尝试用完整的新数据和硬编码数据设置图表。但那不起作用,我试着使用gone和visible,但那不起作用 这是我

我使用android的anychart库来显示饼图,它使用volley和NodeJSAPI从mysql获取数据,以方便crud操作

当数据库中有新数据可用时,我正面临重新绘制图表的问题。 我使用Log.d来确保数据确实在更新它,我检查了anycharts github并尝试了他们列出的解决方案,主要是我只需要用新数据重新设置数据,但没有成功 非常感谢您的帮助。 我甚至尝试创建一个按钮,并尝试用完整的新数据和硬编码数据设置图表。但那不起作用,我试着使用gone和visible,但那不起作用

这是我的密码:

 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)
    }
}
package com.dana.baizaty_frontend.fragments
进口交易
导入android.os.Bundle
导入android.provider.contacts合同
导入android.util.Log
导入android.view.LayoutInflater
导入android.view.view
导入android.view.ViewGroup
导入android.widget.Toast
导入androidx.fragment.app.fragment
导入com.android.volley.Request
导入com.android.volley.Response
导入com.android.volley.toolbox.StringRequest
导入com.anychart.APIlib
导入com.anychart.anychart
导入com.anychart.AnyChartView
导入com.anychart.chart.common.dataentry.dataentry
导入com.anychart.chart.common.dataentry.ValueDataEntry
导入com.anychart.enums.Align
导入com.anychart.enums.LegendLayout
导入com.dana.baizaty_frontend.R
导入com.dana.baizaty_frontend.singleton.AppSingleton
导入com.google.gson.gson
导入com.google.gson.reflect.TypeToken
导入kotlinx.android.synthetic.main.fragment_pfm*
类PFM:Fragment(){
覆盖创建视图(
充气器:布局充气器,容器:视图组?,
savedInstanceState:捆绑?
):查看{
//val anyChartView:anyChartView?=任何图表视图
//为该碎片膨胀布局
//createChart()
var v=充气机。充气(R.layout.fragment_pfm,容器,假)
返回v
}
覆盖已创建的视图(视图:视图,保存状态:捆绑?){
super.onViewCreated(视图,savedInstanceState)
//getTransactions()
button.setOnClickListener{
updateChart()
}
}
覆盖有趣的onStart(){
super.onStart()
getTransactions()
Toast.makeText(上下文,“testing”,“testing.length).show()
}
fun createChart(数据1:MutableList
) {
//var anyChartView:anyChartView?=任意图表视图
//APIlib.getInstance().setActiveAnyChartView(任意图表视图)
//任何图表视图。清除()
任何图表视图。可见性=视图。消失
任意图表视图。设置进度条(进度条)
var pie=AnyChart.pie3d()
//anyChartView?.setProgressBar(进度条)
//添加(ValueDataEntry(“Restart”,30))
//添加数据(ValueDataEntry(“运输”,23))
//添加数据(ValueDataEntry(“cafe”,10))
Log.d(“catagor3”,data1.toString())
饼图数据(数据1)
标题(“支出”)
饼图标签()位置(“外部”)
pie.legend().title()已启用(true)
饼图图例()
.位置(“中底”)
.itemsLayout(LegendLayout.HORIZONTAL)
.对齐(对齐中心);
任何图表视图?设置图表(饼图);
任意图表视图。可见性=视图。可见
data1.clear()
}
乐趣更新艺术(){
var data1=mutableListOf()
数据1.添加(ValueDataEntry(“Restart”,30))
数据1.添加(ValueDataEntry(“运输”,23))
数据1.添加(ValueDataEntry(“cafe”,10))
var pie=AnyChart.pie3d()
任意图表视图。设置图表(饼图)
}
有趣的事情{
var data=mutableListOf()
任何图表视图。无效()
var queue=AppSingleton.instance.getQueue(上下文)
var transactionrequest=StringRequest(
Request.Method.GET,
AppSingleton.instance.getBaseUrl()+“事务/3”,
Response.Listener{Response->
//成功案例
var transactionList=Gson().fromJson(响应,对象:
TypeToken(){}.type)
var类别=可变列表
var values=mutableListOf()
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())
值[idx]+=it.amount
}否则{
类别。添加(it.类别)
添加(it.amount)
var idx=catagories.indexOf(it.catagorie)
//值[idx]=0.0
}
}
Log.d(“catagor”,catagories.toString())
Log.d(“catagor”,values.toString())
类别{
var idx=类别索引(it)
add(ValueDataEntry(it,values[idx]))
}
Log.d(“catagor3”,data.toString())
createChart(数据)
data.clear()
Log.d(“catagor3”,data.toString())
},
Response.ErrorListener{
//错误案例
})
队列?.add(TransactionRequest)
}
}
这是我的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>

直接执行此操作是不可能的,您需要为其添加套接字SocketIO。因此,您需要同时集成socketIO服务器端和客户端。 请检查以下内容:-


基本上,您需要用新数据更新图表,使其处于活动状态并应用新数据。 有关详细信息,请检查以下问题线程:

任何图表视图。无效();将此代码称为insi