0

我正在构建一个 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));

但我仍然得到默认值,谁能告诉我我做错了什么?

4

2 回答 2

0

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

我的方法是通过正确的路径实现我的目标,还是有更多的事情要做?

于 2019-07-02T10:22:27.870 回答
0

在 StorePreference 中,首先,尝试放置此代码。

editor.commit()

接着,

editor.apply().
于 2019-07-02T09:44:33.783 回答