BarChart не должен быть нулевым в MPAndroidChart - PullRequest
0 голосов
/ 20 декабря 2018

Справочная информация:

  • Я пытаюсь отобразить гистограмму на основе нажатых фрагментов, у меня есть два фрагмента и одно действие в моем тестовом проекте.
  • Я использую MPAndroidBarchart и kotlin используется для этого тестового проекта.
  • Использована библиотека com.github.mikephil.charting.charts.BarChart.

У меня есть следующие проблемы:

  • Я получаю следующее сообщение об ошибке:

    barChart mustне быть нулевым

    Я проверил сообщение журнала и получаю значение JSON перед этим сообщением.Ошибка начинается с этого фрагмента кода barChart.data = data

  • Фрагмент 1 по умолчанию не вызывается по умолчанию, но если я щелкаю второй фрагмент, а затем щелкаю первый фрагмент, затем фрагмент 1вызывается.В противном случае это не работает или выдает вышеуказанную ошибку.

Прикрепленный код:

JSON Response

[{"day":"2018-12-12","value":"1"},{"day":"2018-12-13","value":"2"},{"day":"2018-12-14","value":"3"},{"day":"2018-12-15","value":"4"},{"day":"2018-12-17","value":"5"},{"day":"2018-12-18","value":"6"},{"day":"2018-12-19","value":"7"}]

Фрагмент: 1

class FirstFragment : Fragment() {

    var volleyRequest: RequestQueue?=null
    val TestLink="https://wwww.abc.app"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        volleyRequest= Volley.newRequestQueue(this.context)
        getTestValue(TestLink)
    }


    fun getTestValue(Url:String)
    {
        val stringReq=StringRequest(Request.Method.GET,Url,
                Listener {
                    response: String? ->
                    try {
        Log.d("Response JSON",response.toString())
                        ///Bar Chart Test
                        val jsonStringArray=response.toString()
                        println("Attempt to fetch JSON Data")
                        val entries = ArrayList<BarEntry>()
                        val labels = ArrayList<String>()
                        val arr = JSONArray(jsonStringArray)
                        for (i in 0 until arr.length()) {
                            entries.add(BarEntry(arr.getJSONObject(i).getDouble("value").toFloat(), i))
                            labels.add(arr.getJSONObject(i).getString("day"))
                        }
                        val barDataSet = BarDataSet(entries, "Test Sample Record")
                        barDataSet.valueTextSize = 10f
                        val data = BarData(labels, barDataSet)
                        Log.d("Entries", data.toString())
                        barChart.data = data 
                        barChart.setDescription("")
                        }
                    catch (e:JSONException)
                    {
                        e.printStackTrace()
                    }

                },
                Response.ErrorListener {
                    error: VolleyError? ->
                    try{
                        Log.d("Error:", error.toString())
                    }
                    catch (e:JSONException) {e.printStackTrace()}
                }
                )
        volleyRequest!!.add(stringReq)
    }
}

Основная деятельность:

class MainActivity : AppCompatActivity() {

    private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
        when (item.itemId) {
            R.id.navigation_home -> {
               // message.setText(R.string.title_home)
                replaceFragment(FirstFragment())
                return@OnNavigationItemSelectedListener true
            }
            R.id.navigation_dashboard -> {
                //message.setText(R.string.title_dashboard)
                return@OnNavigationItemSelectedListener true
            }
            R.id.navigation_notifications -> {
                //message.setText(R.string.title_notifications)
                return@OnNavigationItemSelectedListener true
            }
        }
        false
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
    }

    private fun replaceFragment(fragment: Fragment){
        val fragmentTransaction = supportFragmentManager.beginTransaction()
        fragmentTransaction.replace(R.id.container, fragment)
        fragmentTransaction.commit()
    }
}

active_fragment_one

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="FragmentOne">

    <com.github.mikephil.charting.charts.BarChart
        android:id="@+id/barChart"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/ColorBg"
        />

</FrameLayout>

1 Ответ

0 голосов
/ 20 декабря 2018

Я не знаю о вашем onCreateView() в FirstFragment, но ваша проблема называется View, когда она еще не создана, поэтому переместите ваш код в onCreate на

@Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        volleyRequest= Volley.newRequestQueue(this.context)
        getTestValue(TestLink)
    }
...