我目前正在开发一个新闻阅读器应用程序,在这个应用程序中,我存储了从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方法是静态的是没有意义的,但是活动本身就是静态的吗?
尝试访问dbmainactivity.db
的上下文是静态的,因为您使用了类名。 您需要引用MainActivity类的实例来访问它的db成员。 由于您是从不同的activity访问它,MainActivity实例可能已经被破坏,因此您将需要另一种方法来访问db值。