Почему появляется сообщение об ошибке Cant instantiate Class

Я получаю огромную ошибку, когда запускаю свое приложение. Далее следует мой ViewHolder и мое основное действие с моим кодом ошибки. Пожалуйста, помогите не понять, почему он дает мне эту ошибку ... Я также знаю, что это сообщение об ошибке продолжает появляться вверх, но на самом деле нет другого способа справиться с этим, если вы не видите, в чем проблема, тогда спросите, поэтому я заранее благодарен и сожалею. Скажите, пожалуйста, если вам нужно больше кода, я буду рад помочь!: D

import android.app.Application;
import android.arch.lifecycle.AndroidViewModel;
import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.ViewModel;

import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

public class CustomerViewModel extends AndroidViewModel {

    private CustomerRepository mRepository;
    private LiveData<List<Customer>> mAllCustomers;


    public CustomerViewModel (Application application) {
        super(application);
        mRepository = new CustomerRepository(application);
        mAllCustomers = mRepository.getAllCustomers();
    }
    public LiveData<List<Customer>> getmAllCustomers() {

        return mAllCustomers;
    }
    public void insert(Customer customer){
        mRepository.insert(customer);

    }
    public void delete(Customer customer){

        mRepository.delete(customer);

    }






}

MainActivity: 

import android.arch.lifecycle.Observer;
    import android.arch.lifecycle.ViewModelProviders;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.design.widget.FloatingActionButton;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.support.v7.widget.Toolbar;
    import android.support.v7.widget.helper.ItemTouchHelper;
    import android.util.Log;
    import android.view.View;
    import android.widget.Toast;

import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;



public class MainActivity extends AppCompatActivity {
    FloatingActionButton fab;
    private CustomerViewModel mCustomerViewModel;


    public static final int NEW_CUSTOMER_ACTIVITY_REQUEST_CODE = 1;



    private static final  String TAG = "MainActivity";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        RecyclerView recyclerView = findViewById(R.id.recycler);
        final List<Customer> savedList;

        final PapperRecyclerAdapter adapter = new PapperRecyclerAdapter(this);



        fab = findViewById(R.id.fab);

        mCustomerViewModel = ViewModelProviders.of(this).get(CustomerViewModel.class);

        new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT ) {
            @Override
            public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
                return false;
            }

            @Override
            public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {






            }
        }).attachToRecyclerView(recyclerView);





        mCustomerViewModel.getmAllCustomers().observe(this, new Observer<List<Customer>>() {
            @Override
            public void onChanged(@Nullable List<Customer> customers) {
                adapter.setCustomer(customers);
            }
        });

        recyclerView.setAdapter(adapter);
        fab.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, CreateCustomer.class);
                startActivityForResult(intent, NEW_CUSTOMER_ACTIVITY_REQUEST_CODE);


            }

        });
        recyclerView.setAdapter(adapter);

        recyclerView.setLayoutManager(new LinearLayoutManager(this));
    }

        public void onActivityResult(final int requestCode, final int resultCode, final Intent data){
            super.onActivityResult(requestCode, resultCode, data);

            if (requestCode == NEW_CUSTOMER_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK) {
                String[] mCustomerSave = data.getStringArrayExtra(CreateCustomer.EXTRA_REPLY);
                Customer customer = new Customer(mCustomerSave[0],mCustomerSave[1],mCustomerSave[2],mCustomerSave[3]);
                mCustomerViewModel.insert(customer);
            } else {
                Toast.makeText(
                        getApplicationContext(),
                        R.string.empty_not_saved,
                        Toast.LENGTH_LONG).show();
            }
        }



}

Сообщение об ошибке:

03-16 13:16:55.327 32615-32615/com.example.jenso.paperseller E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.jenso.paperseller, PID: 32615
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.jenso.paperseller/com.example.jenso.paperseller.MainActivity}: java.lang.RuntimeException: Cannot create an instance of class com.example.jenso.paperseller.CustomerViewModel
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: java.lang.RuntimeException: Cannot create an instance of class com.example.jenso.paperseller.CustomerViewModel
        at android.arch.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:205)
        at android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:133)
        at android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:101)
        at com.example.jenso.paperseller.MainActivity.onCreate(MainActivity.java:51)
        at android.app.Activity.performCreate(Activity.java:7009)
        at android.app.Activity.performCreate(Activity.java:7000)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6494) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
        at android.arch.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:197)
        at android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:133) 
        at android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:101) 
        at com.example.jenso.paperseller.MainActivity.onCreate(MainActivity.java:51) 
        at android.app.Activity.performCreate(Activity.java:7009) 
        at android.app.Activity.performCreate(Activity.java:7000) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6494) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
     Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'android.arch.lifecycle.LiveData com.example.jenso.paperseller.CustomerDao.getAllCustomers()' on a null object reference
        at com.example.jenso.paperseller.CustomerRepository.<init>(CustomerRepository.java:17)
        at com.example.jenso.paperseller.CustomerViewModel.<init>(CustomerViewModel.java:20)
        at java.lang.reflect.Constructor.newInstance0(Native Method) 
        at java.lang.reflect.Constructor.newInstance(Constructor.java:334) 
        at android.arch.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:197) 
        at android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:133) 
        at android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:101) 
        at com.example.jenso.paperseller.MainActivity.onCreate(MainActivity.java:51) 
        at android.app.Activity.performCreate(Activity.java:7009) 
        at android.app.Activity.performCreate(Activity.java:7000) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6494) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 

Дао:

import android.arch.lifecycle.LiveData;
        import android.arch.persistence.room.Dao;
        import android.arch.persistence.room.Delete;
        import android.arch.persistence.room.Insert;
        import android.arch.persistence.room.OnConflictStrategy;
        import android.arch.persistence.room.Query;

        import java.util.List;

@Dao
public interface CustomerDao {

    @Query("SELECT * FROM customer")
    LiveData<List<Customer>> getAllCustomers();

    @Query("SELECT * FROM customer WHERE id = :id")
    LiveData<List<Customer>> getOneCustomerById(int id);

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertAll(Customer... customer);

    @Delete
    void DeleteOneCustomer(Customer... customer);




}

База данных:

import android.arch.persistence.db.SupportSQLiteDatabase;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Database;
import android.arch.persistence.room.Room;
import android.arch.persistence.room.RoomDatabase;
import android.content.Context;
import android.os.AsyncTask;
import android.support.annotation.NonNull;


@Database(entities = {Customer.class}, version = 1,exportSchema = false)
public abstract class CustomerDatabase extends RoomDatabase {
    public abstract CustomerDao customerDao();
    private static CustomerDatabase INSTANCE;


    static CustomerDatabase getDatabase(final Context context){
        if (INSTANCE == null){
            synchronized (CustomerDatabase.class){
                if (INSTANCE == null){
                    INSTANCE = Room.databaseBuilder(context.getApplicationContext(),CustomerDatabase.class,"customer_database")
                            .addCallback(sRoomDatabaseCallback)
                            .build();
                }
            }
        }
        return INSTANCE;



    }
    private static RoomDatabase.Callback sRoomDatabaseCallback = new RoomDatabase.Callback(){

        @Override
        public void onOpen(@NonNull SupportSQLiteDatabase db){
            super.onOpen(db);
            new PopulateDbAsync(INSTANCE).execute();

        }
    };
    private static class PopulateDbAsync extends AsyncTask<Void, Void, Void>{
        private final CustomerDao mDao;

        PopulateDbAsync(CustomerDatabase db){
            mDao = db.customerDao();

        }
        @Override
        protected Void doInBackground(final Void... params){



            return null;



        }


    }


}

репозиторий:

import android.app.Application;
import android.arch.lifecycle.LiveData;
import android.os.AsyncTask;

import java.util.List;

public class CustomerRepository {
    private CustomerDao mCustomerDao;
    private LiveData<List<Customer>> mAllCustomers;


    public CustomerRepository(Application application) {
            CustomerDatabase db = CustomerDatabase.getDatabase(application);

            mAllCustomers = mCustomerDao.getAllCustomers();
            mCustomerDao = db.customerDao();





    }
    LiveData<List<Customer>> getAllCustomers(){
        return mAllCustomers;

    }




    public void insert (Customer customer){
        new insertAsyncTask(mCustomerDao).execute(customer);

    }

    public void delete(Customer customer) {
        new DeleteAsyncTask(mCustomerDao).execute(customer);



    }


    private static class insertAsyncTask extends AsyncTask<Customer, Void, Void> {

        private CustomerDao mAsyncTaskDao;

        insertAsyncTask(CustomerDao dao) {
            mAsyncTaskDao = dao;
        }

        @Override
        protected Void doInBackground(final Customer... params) {
           mAsyncTaskDao.insertAll(params[0]);

            return null;
        }
    }
    private static class DeleteAsyncTask extends AsyncTask<Customer, Void, Void> {

        private CustomerDao mAsyncTaskDao;

        DeleteAsyncTask(CustomerDao dao) {
            mAsyncTaskDao = dao;
        }

        @Override
        protected Void doInBackground(final Customer... params) {
            mAsyncTaskDao.DeleteOneCustomer(params[0]);

            return null;
        }
    }


}

Вы неправильно настроили свой Dao - java.lang.NullPointerException: Attempt to invoke interface method 'android.arch.lifecycle.LiveData com.example.jenso.paperseller.CustomerDao.getAllCustomers()' on a null object reference

PPartisan 16.03.2018 14:31

Да, точно. Похоже, ваш CustomerDao нулевой, я думаю

LS05 16.03.2018 14:32

добавил, что мой Дао не видит никаких проблем

J.Doe2 16.03.2018 14:34

Это экземпляр CustomerDao, то есть null, поэтому проблема будет не в самом классе CustomerDao, а только в классе, который пытается создать экземпляр CustomerDao. Можете ли вы опубликовать свой класс @Database?

Michael Dodd 16.03.2018 14:45

И getDatabase() был вызван в onCreate() до того, как ваш ViewModelProvider попытается заполнить вашу активность? Что происходит в строке 51 MainActivity.java?

Michael Dodd 16.03.2018 14:52

можешь дать мне строку?

J.Doe2 16.03.2018 14:55

Я переместил его ниже getDataCall и все еще выдает ошибку

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

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