Android应用一次性促销码实现问题求助
你之前尝试用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
相关产品推荐
相关产品推荐

