Попытка вызвать виртуальный метод 'android .content.Context.getApplicationInfo ()' для пустой ссылки на объект в Android Studio - PullRequest
0 голосов
/ 19 апреля 2020

В моем приложении была ошибка Attempt to invoke virtual method 'java.util.List com.example.demo.Database.Database.getName()' on a null object reference, и я решил эту ошибку с помощью кода Database database = new Database(this);.

Теперь появилась новая ошибка

E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.example.demo, PID: 19678 java .lang.RuntimeException: Невозможно выполнить экземпляр действия ComponentInfo {com.example.demo / com.example.demo.MainActivity}: java .lang.NullPointerException: Попытка вызова виртуального метода 'android .content.pm.ApplicationInfo android .content.Context.getApplicationInfo () 'для пустой ссылки на объект в android .app.ActivityThread.performLaunchActivity (ActivityThread. java: 3132) в android .app.ActivityThread.handleLaunchActivity (ActivityThread. java: 3415) в android .app.ActivityThread.-wrap17 (ActivityThread. java) в android .app.ActivityThread $ H.handleMessage (ActivityThread. java: 1821) в android .os.Handler.dispatchMessage (Обработчик. java: 102) в android .os.Looper.l oop (Looper. java: 148) в android .app.ActivityThread.main ( ActivityThread. java: 7325) в java .lang.reflect.Method.invoke (родной метод) в com. android .internal.os.ZygoteIni t $ MethodAndArgsCaller.run (ZygoteInit. java: 1230) в com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 1120) Вызывается: java .lang.NullPointerException: попытка выполнить вызовите виртуальный метод 'android .content.pm.ApplicationInfo android .content.Context.getApplicationInfo ()' для пустой ссылки на объект в android .content.ContextWrapper.getApplicationInfo (ContextWrapper. java: 162) в com.readystatesoftware.sqliteasset.SQLiteAssetHelper. (SQLiteAssetHelper. java: 109) по адресу com.readystatesoftware.sqliteasset.SQLiteAssetHelper. (SQLiteAssetHelper. java: 129) по адресу com.example.demo.Database.Database. (База данных *). 1053 *: 20) в com.example.demo.MainActivity. (MainActivity. java: 28) в java .lang.Class.newInstance (собственный метод) в android .app.Instrumentation.newActivity (Инструментирование. java: 1096) в android .app.ActivityThread.performLaunchActivity (ActivityThread. java: 3122) в android .app.ActivityThread.handleLaunchActivity (ActivityThread. java: 3415) в android .app .ActivityThread.-wrap17 (ActivityThread. java) в android .app.ActivityThread $ H.handleMessage (ActivityThread. java: 1821) в android .os.Handler.dispatchMessage (Обработчик. java: 102) в android .os. Looper.l oop (Looper. java: 148) в android .app.ActivityThread.main (ActivityThread. java: 7325) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit. java: 1230) в com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 1120)

Вот мой MainActivity. java код

publi c Класс MainActivity расширяет AppCompatActivity {

RecyclerView recyclerView;
RecyclerView.LayoutManager layoutManager;
SearchAdapter adapter;
private Context context;
MaterialSearchBar materialSearchBar;
List<String> suggestList = new ArrayList<>();
Database database = new Database(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    recyclerView = (RecyclerView)findViewById(R.id.recycler_search);
    layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setHasFixedSize(true);

    materialSearchBar =(MaterialSearchBar)findViewById(R.id.search_bar);
    materialSearchBar.setHint("Search");
    materialSearchBar.setCardViewElevation(10);
    LoadSuggestList();
    materialSearchBar.addTextChangeListener(new TextWatcher() {

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            List<String> suggest = new ArrayList<>();
            for(String search:suggestList)
            {
                if(search.toLowerCase().contains(materialSearchBar.getText().toLowerCase()))
                    suggest.add(search);
            }
            materialSearchBar.setLastSuggestions(suggest);
        }

        @Override
        public void afterTextChanged(Editable s) {


        }
    });
    materialSearchBar.setOnSearchActionListener(new MaterialSearchBar.OnSearchActionListener(){
        @Override
        public void onSearchStateChanged(boolean enabled) {
            if(!enabled)
            {
                adapter = new SearchAdapter(getBaseContext(),database.getPharmacy());
                recyclerView.setAdapter(adapter);
            }
                //recyclerView.setAdapter(adapter);
        }

        @Override
        public void onSearchConfirmed(CharSequence text) {
            startSearch(text.toString());
        }

        @Override
        public void onButtonClicked(int buttonCode) {

        }
    });

    adapter = new SearchAdapter(this,database.getPharmacy());
    recyclerView.setAdapter(adapter);
}

private void startSearch(String text){
    adapter = new SearchAdapter(this, database.getPharmacyByCity(text));
    recyclerView.setAdapter(adapter);
}
private void LoadSuggestList() {
    suggestList = database.getName();
    materialSearchBar.setLastSuggestions(suggestList);
}

Здесь моя база данных. java код

public class Database extends SQLiteAssetHelper {

private static final String DB_NAME = "pharmacyDemo.db";
private static final int DB_VER = 1;

public Database(Context context) {
    super(context, DB_NAME, null, DB_VER);
}

public List<Pharmacy> getPharmacy(){
    SQLiteDatabase db = getReadableDatabase();
    SQLiteQueryBuilder qd = new SQLiteQueryBuilder();

    String[] sqlSelect ={"ID","Name","City","Phone"};
    String tableName = "Pharmacy_List";

    qd.setTables(tableName);
    Cursor cursor = qd.query(db,sqlSelect,null, null ,null , null , null);
    List<Pharmacy> result = new ArrayList<>();
    if(cursor.moveToFirst())
    {
        do{
            Pharmacy pharmacy = new Pharmacy();
            pharmacy.setID(cursor.getInt(cursor.getColumnIndex("ID")));
            pharmacy.setName(cursor.getString(cursor.getColumnIndex("Name")));
            pharmacy.setCity(cursor.getString(cursor.getColumnIndex("City")));
            pharmacy.setPhone(cursor.getString(cursor.getColumnIndex("Phone")));
            result.add(pharmacy);
        }
        while(cursor.moveToNext());
    }
    return result;
}

public List<String> getName(){
    SQLiteDatabase db = getReadableDatabase();
    SQLiteQueryBuilder qd = new SQLiteQueryBuilder();

    String[] sqlSelect ={"Name"};
    String tableName = "Pharmacy_List";

    qd.setTables(tableName);
    Cursor cursor = qd.query(db,sqlSelect,null, null ,null , null , null);
    List<String> result = new ArrayList<>();
    if(cursor.moveToFirst())
    {
        do{
            result.add(cursor.getString(cursor.getColumnIndex("Name")));
        }
        while(cursor.moveToNext());
    }
    return result;
}

public List<Pharmacy> getPharmacyByCity(String city){
    SQLiteDatabase db = getReadableDatabase();
    SQLiteQueryBuilder qd = new SQLiteQueryBuilder();

    String[] sqlSelect ={"ID","Name","City","Phone"};
    String tableName = "Pharmacy_List";

    qd.setTables(tableName);
    Cursor cursor = qd.query(db,sqlSelect,"City = ?", new String[]{city},null , null , null);
    List<Pharmacy> result = new ArrayList<>();
    if(cursor.moveToFirst())
    {
        do{
            Pharmacy pharmacy = new Pharmacy();
            pharmacy.setID(cursor.getInt(cursor.getColumnIndex("ID")));
            pharmacy.setName(cursor.getString(cursor.getColumnIndex("Name")));
            pharmacy.setCity(cursor.getString(cursor.getColumnIndex("City")));
            pharmacy.setPhone(cursor.getString(cursor.getColumnIndex("Phone")));
            result.add(pharmacy);
        }
        while(cursor.moveToNext());
    }
    return result;
}

1 Ответ

0 голосов
/ 19 апреля 2020

Попробуйте выровнять "контекст" в вашей базе данных. java файл, используя context = this;, например:

private static final String DB_NAME = "pharmacyDemo.db";
private static final int DB_VER = 1;

public Database(Context context) {
super(context, DB_NAME, null, DB_VER);
context = this;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...