Является ли метод Android onCreate контекстом c stati? - PullRequest
1 голос
/ 14 июля 2020

В настоящее время я работаю над приложением для чтения новостей, в котором я храню информацию, полученную мной из API и загруженную в базу данных SQLite. Я инициализировал переменную db для нового настраиваемого класса, который содержит базу данных, но когда я пытаюсь получить к нему доступ из другого действия, мне дается «нестатическая c переменная, на которую нельзя ссылаться из контекста stati c» сообщение об ошибке.

Где я инициализирую поле:

public class MainActivity extends AppCompatActivity {

    public NewsReaderDb db;
    private RecyclerView headlinesRecyclerView;
    private RecyclerView.Adapter headlinesAdapter;
    private LinearLayoutManager headlinesManager;
    List<String> headlinesList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Setting up connection to SQLite database
        db = new NewsReaderDb(this);

Где я пытаюсь его использовать:

public class ArticleActivity extends AppCompatActivity {

    WebView webView;
    Intent data;
    NewsReaderDb database;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_article);
        // Setting up webview
        webView = findViewById(R.id.webview);
        webView.getSettings().setLoadWithOverviewMode(true);
        webView.getSettings().setUseWideViewPort(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.setWebViewClient(new HelloWebViewClient());

        data = getIntent();
        // OFFENDING LINE:
        database = MainActivity.db;

Класс NewsReaderDb:

public class NewsReaderDb {

    private NewsReaderDbHelper dbHelper;
    private SQLiteDatabase db;

    public NewsReaderDb(Context context) {
        // Accessing database in writable format
        dbHelper = new NewsReaderDbHelper(context);
        db = dbHelper.getWritableDatabase();
    }

Для меня не имеет смысла, что метод onCreate будет stati c, но по своей сути это действия stati c?

1 Ответ

1 голос
/ 14 июля 2020

Контекст, в котором вы пытаетесь получить доступ к MainActivity.db, - это stati c, поскольку вы используете имя класса. Вам понадобится ссылка на экземпляр класса MainActivity для доступа к его члену db. Поскольку вы обращаетесь к нему из другого действия, экземпляр MainActivity, скорее всего, уже уничтожен, поэтому вам понадобятся другие средства доступа к значению db.

В зависимости от реализации NewsReaderDB вы можете просто инициализировать новый NewsReaderDB в OnCreate ArticleActivity.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...