如何保存用户上次阅读的页码
How to save users' last read Page Number
我正在构建一个 android 应用程序,它通过 https://github.com/barteksc/AndroidPdfViewer 显示特定的 pdf 有很多页面,现在我只是实现了一种从上次打开的页面重新打开 pdf 的方法用户。
我正在使用 SharedPreferences 来存储当前页面,然后在重新加载应用程序后,应用程序将重新打开用户离开的 pdf。
这是我存储和检索数据的共享首选项方法
private void storepreferences () {
PDFView pdfView = findViewById(R.id.pdfView);
savedpage=pdfView.getCurrentPage();
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putInt("key_name2", savedpage);
editor.apply();
}
private void getpreferences () {
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
pageNumber = pref.getInt("key_name2", 0); // getting Integer
}
然后我正在使用 onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
storepreferences();
getpreferences();
另外,为了测试,我正在显示
TextView txt = findViewById(R.id.textView2);
txt.setText(String.valueOf(pageNumber));
但是我仍然得到默认值,谁能告诉我我做错了什么?
在 StorePreference 中,首先尝试放入此代码。
editor.commit()
然后,
editor.apply().
最后我实现了这个,我之前在 OnCreate 上使用 (storepreferences) 但现在我在 BackPressed 上使用
@Override
public void onBackPressed() {
DrawerLayout drawer = findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
storepreferences();
super.onBackPressed();
}
}
之后,我将在 OnCreate 上检索保存的数据
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getpreferences();
}
我使用上述技术是因为我认为它实际上并没有存储我的数据,因为当我使用 Toast 显示当前页面时,它准确显示了用户所在的页码
public void pagestorebutton (){
PDFView pdfView = findViewById(R.id.pdfView);
savedpage = pdfView.getCurrentPage();
Toast myToast = Toast.makeText(this,(String.valueOf(savedpage) ), Toast.LENGTH_SHORT);
myToast.show();
storepreferences();
}
在 onCreate 中,我在单击浮动按钮后使用上述功能
FloatingActionButton fab4 = findViewById(R.id.fab4);
fab4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
pagestorebutton();
}
});
我的方法是否通过正确的途径实现了我的目标,还是还有其他事情要做??
我正在构建一个 android 应用程序,它通过 https://github.com/barteksc/AndroidPdfViewer 显示特定的 pdf 有很多页面,现在我只是实现了一种从上次打开的页面重新打开 pdf 的方法用户。
我正在使用 SharedPreferences 来存储当前页面,然后在重新加载应用程序后,应用程序将重新打开用户离开的 pdf。
这是我存储和检索数据的共享首选项方法
private void storepreferences () {
PDFView pdfView = findViewById(R.id.pdfView);
savedpage=pdfView.getCurrentPage();
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putInt("key_name2", savedpage);
editor.apply();
}
private void getpreferences () {
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
pageNumber = pref.getInt("key_name2", 0); // getting Integer
}
然后我正在使用 onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
storepreferences();
getpreferences();
另外,为了测试,我正在显示
TextView txt = findViewById(R.id.textView2);
txt.setText(String.valueOf(pageNumber));
但是我仍然得到默认值,谁能告诉我我做错了什么?
在 StorePreference 中,首先尝试放入此代码。
editor.commit()
然后,
editor.apply().
最后我实现了这个,我之前在 OnCreate 上使用 (storepreferences) 但现在我在 BackPressed 上使用
@Override
public void onBackPressed() {
DrawerLayout drawer = findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
storepreferences();
super.onBackPressed();
}
}
之后,我将在 OnCreate 上检索保存的数据
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getpreferences();
}
我使用上述技术是因为我认为它实际上并没有存储我的数据,因为当我使用 Toast 显示当前页面时,它准确显示了用户所在的页码
public void pagestorebutton (){
PDFView pdfView = findViewById(R.id.pdfView);
savedpage = pdfView.getCurrentPage();
Toast myToast = Toast.makeText(this,(String.valueOf(savedpage) ), Toast.LENGTH_SHORT);
myToast.show();
storepreferences();
}
在 onCreate 中,我在单击浮动按钮后使用上述功能
FloatingActionButton fab4 = findViewById(R.id.fab4);
fab4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
pagestorebutton();
}
});
我的方法是否通过正确的途径实现了我的目标,还是还有其他事情要做??