ASimpleCache开源缓存框架使用之实现抽签小程序

本文介绍了如何利用ASimpleCache开源缓存框架实现一个抽签小程序,确保签数充足且抽签结果可持久化。通过ACache对象判断缓存状态,抽签后更新并保存数据。项目代码包括XML和Java部分,适合新手学习,欢迎交流优化建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用ASimpleCache开源缓存框架实现抽签小程序

最近在考虑数据缓存的时候发现了这个ASimpleCache,简单到只需要拷贝一个Java文件,正好最近团队有个活动需要抽签,我就做了一个抽签的小程序。介绍如下。

  • 设定足够的签数,每次抽取之后不会再出现
  • 将已经抽签的结果进行缓存,保证下次重启程序的时候不会重新开始抽签

运行效果图:
打开软件,抽签,然后结束程序再进入,数据从缓存中获取,继续抽签

代码实现思路:
1.通过ACache的对象在缓存中获取值来判断是否为空,如果是空,证明目前没有缓存,直接进行赋值就可以,如果不为空,则操作获取到的数据。

JSONArray array = aCache.getAsJSONArray("list");
if (array != null) {

            for (int i = 0; i < array.length(); i++) {
                try {
                    list.add(array.getInt(i));
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        } else {
            for (int i = 0; i < number_all; i++) {
                list.add(i);
            }
        }

2.当抽签完成之后,要把抽到的数据从list中删除,并且把当前的数据进行缓存。

                list.remove(list.get(tag));
                JSONArray array = new JSONArray();
                for (int i = 0; i < list.size(); i++) {
                    array.put(list.get(i));
                }
                aCache.put("list", array);

主要就是这两个点。因为我这还加了个筛选耗时的操作,所以用Thread和Handler来进行线程和UI更新的操作。
项目的详细代码如下:如果还有下载ACache.java的话,请点击这里 ,新手第一次写博客。不喜勿喷。这个小程序当时写的仓促,但是功能还是实现了,仅供参考,有更好的实现思路和建议请留言评论。


xml代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#FF4500" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerInParent="true"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/text_two"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="王者荣耀抽签"
                android:textColor="#FFFFFF"
                android:textSize="18sp" />
        </LinearLayout>
    </RelativeLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="10dp" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="horizontal" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="已抽签数:" />

            <TextView
                android:id="@+id/text_yichou"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:text="0"
                android:textColor="#FF4500"
                android:textSize="20sp"
                android:textStyle="bold" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:gravity="center_vertical"
            android:orientation="horizontal" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="剩余签数:" />

            <TextView
                android:id="@+id/text_shengyu"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:text="70"
                android:textColor="#FF4500"
                android:textSize="20sp"
                android:textStyle="bold" />
        </LinearLayout>
    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="0.5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:background="#F0F0F0" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/text_number"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="0"
                android:textColor="#000000"
                android:textSize="100sp" />

            <Button
                android:id="@+id/btn_start"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:layout_gravity="center"
                android:layout_marginTop="40dp"
                android:background="@drawable/circle"
                android:text="开始"
                android:textColor="#FFFFFF"
                android:textSize="25dp" />
        </LinearLayout>
    </RelativeLayout>

</LinearLayout>

java代码

public class ChouQian extends Activity {
    private TextView text_yichou = null;
    private TextView text_weichou = null;
    private TextView text_number = null;
    private Button start = null;
    private IHandler handler = new IHandler();
    private TimerTask task = null;
    private Timer timer = null;
    private int time = 15;
    private boolean chouqian = true;
    private ArrayList<Integer> list = new ArrayList<Integer>();
    private int tag = 0;
    private int number_yichou = 0;
    private int number_all = 70;
    private int number_weichou = number_all;
    private ACache aCache = null;
    private boolean slow = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.setContentView(R.layout.chouqian);
        aCache = ACache.get(getApplicationContext());
        initViews();
    }

    private void initViews() {
        text_number = (TextView) findViewById(R.id.text_number);
        text_weichou = (TextView) findViewById(R.id.text_shengyu);
        text_yichou = (TextView) findViewById(R.id.text_yichou);
        start = (Button) findViewById(R.id.btn_start);
        JSONArray array = aCache.getAsJSONArray("list");
        if (array != null) {

            for (int i = 0; i < array.length(); i++) {
                try {
                    list.add(array.getInt(i));
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
            number_yichou = number_all - list.size();
            number_weichou = list.size();
            text_weichou.setText(list.size() + "");
            text_yichou.setText((number_all - list.size()) + "");
        } else {
            for (int i = 0; i < number_all; i++) {
                list.add(i);
            }
        }
        start.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                if (number_yichou >= number_all) {
                    Toast.makeText(getApplicationContext(), "已经全部抽完啦", 200)
                            .show();
                } else {
                    chouqian = true;
                    time = 15;
                    if (slow) {
                        ChouQianThread();
                    } else {
                        Toast.makeText(getApplicationContext(), "抽的太快了", 100)
                                .show();
                    }
                }

            }
        });
    }

    private void ChouQianThread() {
        timer = new Timer();
        task = new TimerTask() {

            @Override
            public void run() {
                if (chouqian) {
                    if (time >= 0) {
                        handler.sendEmptyMessage(0);
                        slow = false;
                    } else {
                        handler.sendEmptyMessage(1);
                        slow = true;
                        chouqian = false;
                    }
                }
            }
        };
        timer.schedule(task, 0, 100);
    }

    private class IHandler extends Handler {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
            case 0:
                tag = (int) (Math.random() * list.size());
                text_number.setText(list.get(tag) + "");
                time--;
                break;
            case 1:
                number_yichou++;
                number_weichou--;
                if (number_yichou <= number_all) {
                    text_yichou.setText(number_yichou + "");

                }
                if (number_weichou >= 0) {
                    text_weichou.setText(number_weichou + "");
                }
                text_number.setText(list.get(tag) + "");
                list.remove(list.get(tag));
                JSONArray array = new JSONArray();
                for (int i = 0; i < list.size(); i++) {
                    array.put(list.get(i));
                }
                aCache.put("list", array);
                break;
            }
        }
    }
}

谢谢阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值