java - 在 TextView 中保存数据
问题描述
我是 Android 编程新手。我创建了一个应用程序,在其中将视频添加到奖品中,这些视频给了我一个硬币奖励,这个硬币奖励TextView
以百分比显示。
问题是当我离开APP并返回或打开APP屏幕时,TextView
百分比计数器将重置为零,然后删除每个用户的工作。我需要找到一种我不会写的方法,将获得的学分保存到 100%,所以学分必须保留到最后,没有任何东西可以删除它们,我尝试了onSaveInstanceState
outstate 方法,但它不起作用。
下面是我写的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();
}
}
解决方案
您可以使用共享首选项。基本上,您可以将数据保存为键值。欲了解更多信息,请访问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。
推荐阅读
- google-api - 从 Google Global HTTP Batch 迁移到 API 特定的 Batch 端点,请求未执行但未引发错误
- if-statement - VHDL 中 IF 语句样式的差异
- docker - 如何在 Docker 中建立一个具有可访问代码库的 Drupal 网站?
- ruby-on-rails - 如何收集包含在当月的对象的集合
- r - 如何使用 PRECREC 包在同一个图上绘制两条 ROC 曲线
- javascript - 如何在谷歌脚本中设置和获取日期?
- scala - 在 Scala 中混合逆变和协变类型
- python - 对于 df 中的每一行减去另一个 df
- python - LDA 主题没有变化
- mysql - GCP MySQL Cloud SQL 数据库无法正确导出多字节 UTF-8 字符