You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用一次性促销码实现问题求助

实现一次性促销码功能(基于SharedPreferences)

你之前尝试用SharedPreferences的思路是对的,只是没用到正确的逻辑上。下面是修改后的完整代码,直接替换你的MainActivity即可:

package com.mycompany.myapp;
import android.app.*;
import android.os.*;
import android.widget.*;
import android.view.*;
import android.content.*;

public class MainActivity extends Activity 
{
    private SharedPreferences usedPromos;

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

        // 初始化SharedPreferences,用来存储已使用的促销码
        usedPromos = getPreferences(MODE_PRIVATE);

        Button button = findViewById(R.id.send); 
        button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    EditText editText = findViewById(R.id.promo);
                    TextView textView = findViewById(R.id.ident);
                    String inputCode = editText.getText().toString().trim();         

                    // 先判断输入的是不是有效促销码
                    if (inputCode.equals("ILIKENEKO") || inputCode.equals("NEWYEAR2023")){
                        // 检查这个码是否已经被使用过
                        if (!usedPromos.getBoolean(inputCode, false)){
                            // 标记该码为已使用
                            usedPromos.edit().putBoolean(inputCode, true).apply();
                            textView.setText("Successfully!");
                        } else {
                            textView.setText("Promo code used or expired!");
                        }
                    } else {
                        textView.setText("Invalid promo code!");
                    }
                }
        });
    }
}

关键逻辑说明

  • 初始化SharedPreferences:用getPreferences(MODE_PRIVATE)获取当前Activity专属的存储实例,数据仅本应用可访问,会持久化保存直到用户卸载应用。
  • 双重验证逻辑:先判断输入的码是否在有效列表里,再通过getBoolean(inputCode, false)检查是否已被标记为使用过(默认返回false表示未使用)。
  • 标记已使用:首次使用促销码时,通过编辑器存入键值对(促销码为键,true为值),用apply()异步提交修改,避免阻塞UI线程。
  • 区分提示信息:把无效码和已使用的提示分开,用户能更清晰地知道错误原因。

如果需要多个Activity共享已使用的促销码,把getPreferences(MODE_PRIVATE)换成getSharedPreferences("UsedPromos", MODE_PRIVATE)即可,所有Activity用同一个名称就能访问同一份数据。

内容的提问来源于stack exchange,提问作者AlertKaput

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:50:25