提问者:小点点

Android onCreate方法是静态上下文吗?


我目前正在开发一个新闻阅读器应用程序,在这个应用程序中,我存储了从API检索到的信息,并加载到SQLite数据库中。 我将一个db变量初始化为一个新的保存数据库的自定义类,但当我试图从另一个activity访问它时,会给我一个“非静态变量db不能从静态上下文引用”的错误消息。

我正在初始化字段的位置:

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方法是静态的是没有意义的,但是活动本身就是静态的吗?


共1个答案

匿名用户

尝试访问dbmainactivity.db的上下文是静态的,因为您使用了类名。 您需要引用MainActivity类的实例来访问它的db成员。 由于您是从不同的activity访问它,MainActivity实例可能已经被破坏,因此您将需要另一种方法来访问db值。