首页 > 解决方案 > 在 TextView 中保存数据

问题描述

我是 Android 编程新手。我创建了一个应用程序,在其中将视频添加到奖品中,这些视频给了我一个硬币奖励,这个硬币奖励TextView以百分比显示。

问题是当我离开APP并返回或打开APP屏幕时,TextView百分比计数器将重置为零,然后删除每个用户的工作。我需要找到一种我不会写的方法,将获得的学分保存到 100%,所以学分必须保留到最后,没有任何东西可以删除它们,我尝试了onSaveInstanceStateoutstate 方法,但它不起作用。

下面是我写的App代码。

public class MainActivity extends AppCompatActivity implements RewardedVideoAdListener {

    private AdView mAdView;
    private WebView mywebview;
    private InterstitialAd mInterstitialAd;
    private FirebaseAnalytics mFirebaseAnalytics;
    private RewardedVideoAd mRewardedVideoAd;
    private static final String TAG = MainActivity.class.getName();
    public double Coins;

    RelativeLayout Home;
    RelativeLayout PgCoins;
    Button btn1, btn2;
    ImageButton Backbtn;
    TextView mCoinscounter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MobileAds.initialize(this, "");

        //counter CRD
        mCoinscounter = (TextView) findViewById(R.id.Textcoins);

        // WEbView
        WebView mywebview = findViewById(R.id.mywebview);
        WebSettings webSettings = mywebview.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setDomStorageEnabled(true);
        mywebview.setWebChromeClient(new WebChromeClient());
        mywebview.getSettings().setUseWideViewPort(true);
        mywebview.setFocusableInTouchMode(true);
        mywebview.setWebViewClient(new WebViewClient());
        mywebview.loadUrl("url");

        Home = findViewById(R.id.home);
        PgCoins = findViewById(R.id.pagecoins);

        btn1 = findViewById(R.id.btn1);
        btn2 = findViewById(R.id.btn2);
        Backbtn = findViewById(R.id.backbtn);

        Home.setVisibility(View.VISIBLE);
        PgCoins.setVisibility(View.GONE);

        findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (mRewardedVideoAd.isLoaded()) {
                    mRewardedVideoAd.show();
                }
            }
        });

        mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this);
        mRewardedVideoAd.setRewardedVideoAdListener(this);

        // ADMob Top
        mAdView = findViewById(R.id.adViewTop);
        AdRequest adRequest = new AdRequest.Builder().setRequestAgent("android_studio:ad_template").build();
        mAdView.loadAd(adRequest);

        // ADMob Bot
        mAdView = findViewById(R.id.adViewBot);
        AdRequest adRequest1 = new AdRequest.Builder().setRequestAgent("android_studio:ad_template").build();
        mAdView.loadAd(adRequest1);

        // ADMob Top Coins
        mAdView = findViewById(R.id.adViewTopcoins);
        AdRequest adRequest2 = new AdRequest.Builder().setRequestAgent("android_studio:ad_template").build();
        mAdView.loadAd(adRequest2);

        // ADMob Bot Coins
        mAdView = findViewById(R.id.adViewBotcoins);
        AdRequest adRequest3 = new AdRequest.Builder().setRequestAgent("android_studio:ad_template").build();
        mAdView.loadAd(adRequest3);

        //ADMob Interstitial
        prepareAd();
        ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
        scheduler.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    public void run() {
                        if (mInterstitialAd.isLoaded()) {
                            mInterstitialAd.show();
                        } else {
                            Log.d("TAG", "Interstitial not loaded");
                        }

                        prepareAd();
                    }
                });

            }
        }, 60, 60, TimeUnit.SECONDS);

        // Obtain the FirebaseAnalytics instance.
        mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);

        //ADMob Video
        loadRewardedVideoAd();

    }
    public void displayCrd (double amount){
            mCoinscounter.setText(String.format("%.2f", amount));
    }

    private void loadRewardedVideoAd() {
        mRewardedVideoAd.loadAd("ca-app-pub-3940256099942544/5224354917",
                new AdRequest.Builder().build());
    }

    //ADMob Interstitial
    public void prepareAd(){
        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
        mInterstitialAd.loadAd(new AdRequest.Builder().build());
    }

    //Screen Change Page
    boolean Change = true;

    public void change(View view)
    {
        if (Change){
            Home.setVisibility(View.GONE);
            PgCoins.setVisibility(View.VISIBLE);
            Change = false;
        }else{
            Home.setVisibility(View.VISIBLE);
            PgCoins.setVisibility(View.GONE);
            Change = true;
        }
    }

    @Override
    public void onRewardedVideoAdLoaded() {
        Log.d(TAG, "Video Caricato");
    }

    @Override
    public void onRewardedVideoAdOpened() {

    }

    @Override
    public void onRewardedVideoStarted() {

    }

    @Override
    public void onRewardedVideoAdClosed() {
        loadRewardedVideoAd();
    }

    @Override
    public void onRewarded(RewardItem rewardItem) {
        Toast.makeText(this, " Amount " + rewardItem.getType() + " : " + rewardItem.getAmount(), Toast.LENGTH_SHORT).show();
       Coins += rewardItem.getAmount();
       displayCrd(Coins/3600*100);
    }

    @Override
    public void onRewardedVideoAdLeftApplication() {

    }

    @Override
    public void onRewardedVideoAdFailedToLoad(int i) {
        Log.d(TAG, "Caricamento Fallito");
    }

    @Override
    public void onRewardedVideoCompleted() {
        loadRewardedVideoAd();
    }
}

标签: javaandroid

解决方案


您可以使用共享首选项。基本上,您可以将数据保存为键值。欲了解更多信息,请访问https://developer.android.com/training/data-storage/shared-preferences

使用 Kotlin 写入共享首选项

val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
with (sharedPref.edit()) {
    putInt(getString(R.string.saved_high_score_key), newHighScore)
    commit()
}

阅读与 Kotlin 的共享首选项

val sharedPref = activity?.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE)

你必须做,保存数据 onDestory 并读取数据 onCreate。


推荐阅读