Сохранить вознагражденную стоимость объявления после закрытия - PullRequest
0 голосов
/ 09 февраля 2020

После просмотра вознагражденного рекламного видео в текстовом представлении отображаются вознагражденные баллы. Очки накапливаются после каждого видео. Однако, когда приложение закрывается, точки стираются. Я хотел бы, чтобы пункты продолжали показывать, когда пользователь возвращается в приложение. Я не мог понять, является ли это частью метода onDestroy или сохраненного экземпляра.

    public class ProfileActivity extends AppCompatActivity implements RewardedVideoAdListener {

    TextView mText, userEmail;
    private int pointCount;

    private TextView dateTimeDisplay;
    private Calendar calendar;
    private SimpleDateFormat dateFormat;
    private String date;

    Button userLogout;
    Button goToHome;
    ImageView ivQR;
    private AdView mAdView;
    FirebaseAuth firebaseAuth;
    FirebaseUser firebaseUser;
    FirebaseDatabase firebaseDatabase;
    DatabaseReference databaseReference;
    private RewardedVideoAd mRewardedVideoAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profile);

     //rewards ads
        //ca-app-pub-9125010107042455/6647636731 actual
        //ca-app-pub-3940256099942544~3347511713 for testing
        MobileAds.initialize(getApplicationContext(), ("ca-app-pub-9125010107042455/6647636731"));
        // Use an activity context to get the rewarded video instance.
        mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this);
        mRewardedVideoAd.setRewardedVideoAdListener(this);

        //points count
        mText = findViewById(R.id.textView);
        pointCount = 0;
        mText.setText("Points: " + pointCount);

        loadRewardedVideoAd();

     private void loadRewardedVideoAd (){

        if (!mRewardedVideoAd.isLoaded()){
            //ca-app-pub-9125010107042455/6647636731 actual
            //ca-app-pub-3940256099942544/5224354917 for testing
            mRewardedVideoAd.loadAd("ca-app-pub-3940256099942544/5224354917",new AdRequest.Builder().build());
        }
    }

    public void startVideoAd(View view){
        if(mRewardedVideoAd.isLoaded()){
            mRewardedVideoAd.show();
        }
    }

    @Override
    public void onRewardedVideoAdLoaded() {

    }

    @Override
    public void onRewardedVideoAdOpened() {

    }

    @Override
    public void onRewardedVideoStarted() {

    }

    @Override
    public void onRewardedVideoAdClosed() {

        loadRewardedVideoAd();

    }

    private void addPoints(int points) {
        pointCount +=  points;
        mText.setText("Points: " + pointCount);
    }

    @Override
    public void onRewarded(RewardItem rewardItem) {

        Toast.makeText(ProfileActivity.this, "? Points ?", Toast.LENGTH_SHORT).show();
        addPoints(rewardItem.getAmount());

    }

    @Override
    public void onRewardedVideoAdLeftApplication() {

    }

    @Override
    public void onRewardedVideoAdFailedToLoad(int i) {

    }

    @Override
    protected void onPause() {
        mRewardedVideoAd.pause(this);
        super.onPause();
    }

    @Override
    protected void onResume() {
        mRewardedVideoAd.resume(this);
        super.onResume();

    }

    @Override
    protected void onDestroy() {
        mRewardedVideoAd.destroy(this);
        super.onDestroy();
    }

    @Override
    public void onRewardedVideoCompleted() {

    }
}

Ответы [ 3 ]

2 голосов
/ 09 февраля 2020

Вы должны использовать метод onSaveInstanceState(Bundle savedInstanceState), чтобы сохранить количество точек.

Вы можете сделать это, выполнив следующее:

//This is what will be used to recognize your number of points in the saved bundle.
static final String POINTS = "pointCount";

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save your number of points
    savedInstanceState.putInt(POINTS, pointCount);

    super.onSaveInstanceState(savedInstanceState);
}

И затем вызовите onRestoreInstanceState(Bundle savedInstanceState) метод, чтобы вы могли восстановить количество баллов.

public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    // Restore your number of points and store them in your variable
    pointCount = savedInstanceState.getInt(POINTS);
}

Если вам нужны дополнительные объяснения, обратитесь к официальной документации https://developer.android.com/guide/components/activities/activity-lifecycle#java

1 голос
/ 10 февраля 2020

Вы можете сохранить накопленные баллы в базе данных или просто использовать SharedPreferences для сохранения и загрузки баллов

для сохранения баллов

private void savePoints(int totalPoints){
    SharedPreferences prefs = mContext.getSharedPreferences(
            "user_points", Context.MODE_PRIVATE);
    // save points
    prefs.edit().putInt("points", totalPoints).apply();
}

для загрузки сохраненных баллов

private int getPoints(){
    SharedPreferences prefs = mContext.getSharedPreferences(
            "user_points", Context.MODE_PRIVATE);
    // retrieve points
    // 0 is the default value if nothing was stored before
    return prefs.getInt("points", 0);
}

Сохранение очков в вашем addPoints методе

private void addPoints(int points) {
pointCount +=  points;

// save points to SharedPrefs
savePoints(pointCount);

mText.setText("Points: " + pointCount);
}

и, наконец, в вашем onCreate() измените это

pointCount = 0;

на это

pointCount = getPoints();
1 голос
/ 09 февраля 2020

я бы порекомендовал использовать SharedPrefrence для этого.

вы можете использовать этот класс для своего будущего использования.

создать имя класса: SharedPref и сохранить этот код в этом классе .

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;

public class SharedPref
{
    private static SharedPreferences mSharedPref;
    public static final String POINTS = "POINTS";

    private SharedPref()
    {

    }

    public static void init(Context context)
    {
        if(mSharedPref == null)
            mSharedPref = context.getSharedPreferences(context.getPackageName(), Activity.MODE_PRIVATE);
    }

    public static String read(String key, String defValue) {
        return mSharedPref.getString(key, defValue);
    }

    public static void write(String key, String value) {
        SharedPreferences.Editor prefsEditor = mSharedPref.edit();
        prefsEditor.putString(key, value);
        prefsEditor.commit();
    }

    public static boolean read(String key, boolean defValue) {
        return mSharedPref.getBoolean(key, defValue);
    }

    public static void write(String key, boolean value) {
        SharedPreferences.Editor prefsEditor = mSharedPref.edit();
        prefsEditor.putBoolean(key, value);
        prefsEditor.commit();
    }

    public static Integer read(String key, int defValue) {
        return mSharedPref.getInt(key, defValue);
    }

    public static void write(String key, Integer value) {
        SharedPreferences.Editor prefsEditor = mSharedPref.edit();
        prefsEditor.putInt(key, value).commit();
    }
}

Просто позвоните SharedPref.init() на MainActivity один раз

SharedPref.init(getApplicationContext());

Для записи данных

SharedPref.write(SharedPref.POINTS, 25); //save 25 POINTS in shared preference.

Для чтения данных

int POINTS = SharedPref.read(SharedPref.POINTS, 0); //read POINTS from shared preference, if no value found then it will return 0 as default POINTS.

благодаря: Как использовать SharedPreferences в Android для хранения, извлечения и редактирования значений

в соответствии с вашими кодами, решение будет выглядеть так:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_profile);
    SharedPref.init(getApplicationContext());
    // your other codes here.....

измените функцию addPoints, как показано ниже:

private void addPoints(int points) {
    pointCount +=  points;
    SharedPref.write(SharedPref.POINTS, pointCount);
    int POINTS = SharedPref.read(SharedPref.POINTS, 0); // you can make this globle once then use it anywhere in the class..
    mText.setText("Points: " + POINTS);
}

теперь используйте этот код, чтобы показать общее количество очков:

int POINTS = SharedPref.read(SharedPref.POINTS, 0);
mText.setText("Points: " + POINTS);
...