有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何保存用户上次读取的页码

我正在构建一个安卓应用程序,它通过https://github.com/barteksc/AndroidPdfViewer显示一个特定的pdf,有很多页面,现在我正在实现一个方法,从用户最后打开的页面重新打开pdf

我正在使用SharedReferences存储当前页面,然后在重新加载应用程序后,应用程序将在用户离开的地方重新打开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));

但我还是得到了默认值,谁能告诉我我做错了什么


共 (1) 个答案

  1. # 1 楼答案

    最后我实现了这一点,我以前在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();
                }
            });
    

    我的方法是通过正确的途径实现我的目标,还是还有其他事情要做