Android Studio MPAndroidChart java.lang.NullPointerException: попытка вызвать виртуальный метод

«findViewById» имеет красный цвет и не может разрешить метод. Что не так с моими кодами и что мне делать?

Это коды для моего дизайна в диаграммах

<?xml version = "1.0" encoding = "utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:tools = "http://schemas.android.com/tools"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:background = "#f6f6f6"
    tools:context = ".Charts">

    <TextView
        android:id = "@+id/textView11"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_marginEnd = "8dp"
        android:layout_marginStart = "8dp"
        android:layout_marginTop = "8dp"
        android:fontFamily = "@font/montserrat"
        android:text = "Distribution Chart"
        android:textColor = "#242a2c"
        android:textSize = "24dp"
        android:textStyle = "bold"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent" />

    <com.github.mikephil.charting.charts.PieChart
        android:id = "@+id/piechart"
        android:layout_width = "200dp"
        android:layout_height = "200dp"
        android:layout_marginEnd = "8dp"
        android:layout_marginStart = "8dp"
        android:layout_marginTop = "13dp"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toBottomOf = "@+id/textView11">

    </com.github.mikephil.charting.charts.PieChart>



</android.support.constraint.ConstraintLayout>

Это мои коды для java-файла моего фрагмента диаграммы.

package com.example.admin.test2;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet;
import com.github.mikephil.charting.data.PieEntry;

import java.util.ArrayList;
import java.util.List;

public class Charts extends Fragment {

    float dataNum[] = {1000f, 500f, 150f, 50f, 6000f, 450f};
    String dataNames[] = {"Sample Data", "Sample Data", "Sample Data", "Sample Data", "Sample Data", "Sample Data"};

    public Charts() {
        setupPieChart();
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate (R.layout.fragment_charts, container, false);
    }

    private void setupPieChart()
    {
        //Populating a list of PieEntries;
        List<PieEntry> pieEntries = new ArrayList<> ();
        for (int i = 0; i < dataNum.length; i++)
        {
            pieEntries.add(new PieEntry(dataNum[i], dataNames[i]));
        }

        PieDataSet dataSet = new PieDataSet (pieEntries, "Sample Data");
        PieData data = new PieData (dataSet);

        //get the chart;
        PieChart chartt = (PieChart) findViewById(R.id.piechart);
        chartt.setData(data);
        chartt.invalidate();
    }
}

И это ОШИБКА, с которой я столкнулся

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.admin.test2, PID: 12568
                  java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.admin.test2/com.example.admin.test2.ScreenOne}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View com.github.mikephil.charting.charts.PieChart.findViewById(int)' on a null object reference
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2841)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
                      at android.app.ActivityThread.-wrap11(Unknown Source:0)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
                      at android.os.Handler.dispatchMessage(Handler.java:105)
                      at android.os.Looper.loop(Looper.java:164)
                      at android.app.ActivityThread.main(ActivityThread.java:6944)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
                   Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View com.github.mikephil.charting.charts.PieChart.findViewById(int)' on a null object reference
                      at com.example.admin.test2.Charts.setupPieChart(Charts.java:49)
                      at com.example.admin.test2.Charts.<init>(Charts.java:24)
                      at com.example.admin.test2.ScreenOne.<init>(ScreenOne.java:32)
                      at java.lang.Class.newInstance(Native Method)
                      at android.app.Instrumentation.newActivity(Instrumentation.java:1180)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2831)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032) 
                      at android.app.ActivityThread.-wrap11(Unknown Source:0) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696) 
                      at android.os.Handler.dispatchMessage(Handler.java:105) 
                      at android.os.Looper.loop(Looper.java:164) 
                      at android.app.ActivityThread.main(ActivityThread.java:6944) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

Я просто хочу отобразить на диаграмме данные в массиве.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
381
1

Ответы 1

Создайте этот метод

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    setupPieChart();
}

И удалить это

public Charts() {
      setupPieChart();
}

это нормально? если фрагмент...

user11005112 03.02.2019 04:03

Все в порядке, я добавил его. Но почему мой «findViewById» красный, хотя и говорит, что не может разрешить метод..???

user11005112 03.02.2019 04:09

@user11005112 user11005112, потому что представление все еще не создано, представление создается в onCreateView, и вы должны выполнять свою работу в onActivityCreated при использовании фрагмента

Radesh 03.02.2019 14:15

Другие вопросы по теме