Java 如何在弹出关闭后保存点并避免SQLite重复?

Java 如何在弹出关闭后保存点并避免SQLite重复?,java,android,Java,Android,我有36个ImageButton,每一个我都调用同一个弹出窗口,在这个弹出窗口中我从sqlite数据库设置了随机问题。当用户通过单击4种可能的解决方案之一来回答问题时,它将关闭并返回到我的36个按钮。现在我有两个问题: 我使用此代码来避免重复问题。在活动范围内: LinkedList mAnsweredQuestions=新建LinkedList() private String generateWhere子句(){ StringBuilder结果=新建StringBuilder(); 用于(长

我有36个ImageButton,每一个我都调用同一个弹出窗口,在这个弹出窗口中我从sqlite数据库设置了随机问题。当用户通过单击4种可能的解决方案之一来回答问题时,它将关闭并返回到我的36个按钮。现在我有两个问题:

  • 我使用此代码来避免重复问题。在活动范围内:

    LinkedList mAnsweredQuestions=新建LinkedList()

    private String generateWhere子句(){
    StringBuilder结果=新建StringBuilder();
    用于(长l:mAnsweredQuestions){
    结果。追加(“和_ID”+l);
    }
    返回result.toString();
    }
    
    在我的问题方法中:

    添加(c.getLong(0))

  • 但当我的活动在弹出问题关闭后恢复时,这不起作用。它就像是从零开始加载我的活动。我在我的另一个游戏中使用它,它在“正常”活动中运行良好,但由于某些原因,在弹出后它不会运行

    2.我需要每次按下imageButton启动此弹出式活动,并在每次正确回答后保存不同的点数。我在另一个游戏中使用startActivityForResult启动活动并保存结果,但在这种情况下,我用每个按钮启动不同的活动。现在我必须开始相同的活动,并保存不同的结果。我该怎么做? 这是我的弹出式问题类:

    public class Pitanja_Cigle extends Activity{
    
        public static String tacanOdg;
        int counter = 0;
    
        Button b1, b2, b3, b4;
        TextView question;
    
    
    LinkedList<Long> mAnsweredQuestions = new LinkedList<Long>();
    
        private String generateWhereClause(){
            StringBuilder result = new StringBuilder();
            for (Long l : mAnsweredQuestions){
                result.append(" AND _ID <> " + l);
            }
            return result.toString();
        }
    
        Runnable mLaunchTaskFinish = new Runnable() {
            public void run() {
                finish();
            }
         };
    
        private class Answer {
            public Answer(String opt, boolean correct) {
                option = opt;
                isCorrect = correct;
            }
    
            String option;
            boolean isCorrect;
        }
        Handler mHandler = new Handler();
    
        final OnClickListener clickListener = new OnClickListener() {
            public void onClick(View v) {
                Answer ans = (Answer) v.getTag();
                if (ans.isCorrect) {
                    Intent i = new Intent("rs.androidaplikacije.toplo_hladno.TACANODGOVOR");
                    startActivity(i);
                    mHandler.postDelayed(mLaunchTaskFinish,1200);
                }
                else{   
                    Intent i = new Intent(getApplicationContext(), PogresanOdgovor.class);
                    i.putExtra("tacanOdgovor", tacanOdg);
                    startActivity(i);
                    mHandler.postDelayed(mLaunchTaskFinish,2200);
                }
            }
         };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            requestWindowFeature(Window.FEATURE_NO_TITLE);   //full screen
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    
            setContentView(R.layout.pitanja_cigle);
    
            InicirajVariable();
    
            nextQuestion();
        }
    
        private void nextQuestion() {
            counter++;
    
            TestAdapter mDbHelper = new TestAdapter(this);
            mDbHelper.createDatabase();
    
            try{    //Pokusava da otvori db
    
                mDbHelper.open();  //baza otvorena
    
                Cursor c = mDbHelper.getPitanjaCigle(generateWhereClause());
    
                mAnsweredQuestions.add(c.getLong(0));
    
                List<Answer> labels = new ArrayList<Answer>();
    
                labels.add(new Answer(c.getString(2), true));
                labels.add(new Answer(c.getString(3), false));
                labels.add(new Answer(c.getString(4), false));
                labels.add(new Answer(c.getString(5), false));
    
                tacanOdg = c.getString(2);
    
                Collections.shuffle(labels);
    
                question.setText(c.getString(1));
    
                b1.setText(labels.get(0).option);
                b1.setTag(labels.get(0));
                b1.setOnClickListener(clickListener);
    
                b2.setText(labels.get(1).option);
                b2.setTag(labels.get(1));
                b2.setOnClickListener(clickListener);
    
                b3.setText(labels.get(2).option);
                b3.setTag(labels.get(2));
                b3.setOnClickListener(clickListener);
    
                b4.setText(labels.get(3).option);
                b4.setTag(labels.get(3));
                b4.setOnClickListener(clickListener);
    
        }
    
        finally{    // kada zavrsi sa koriscenjem baze podataka, zatvara db
            mDbHelper.close();
        }
        }
    
        private void InicirajVariable() {
            Typeface naslov = Typeface.createFromAsset(getAssets(), "Lobster.ttf");
            Typeface dugmad = Typeface.createFromAsset(getAssets(), "Bebas.ttf");
    
            question = (TextView) findViewById(R.id.tvPitanjeCigle);
            b1 = (Button) findViewById(R.id.bOdgCigle1);
            b2 = (Button) findViewById(R.id.bOdgCigle2);
            b3 = (Button) findViewById(R.id.bOdgCigle3);
            b4 = (Button) findViewById(R.id.bOdgCigle4);
    
            b1.setTypeface(dugmad);
            b2.setTypeface(dugmad);
            b3.setTypeface(dugmad);
            b4.setTypeface(dugmad);
            question.setTypeface(naslov);
    
        }
    
    }
    
    公共类Pitanja_Cigle扩展活动{
    公共静态字符串tacanOdg;
    int计数器=0;
    按钮b1、b2、b3、b4;
    文本视图问题;
    LinkedList mAnsweredQuestions=新建LinkedList();
    专用字符串generateWhereClause(){
    StringBuilder结果=新建StringBuilder();
    用于(长l:mAnsweredQuestions){
    结果。追加(“和_ID”+l);
    }
    返回result.toString();
    }
    Runnable mLaunchTaskFinish=new Runnable(){
    公开募捐{
    完成();
    }
    };
    私人类答案{
    公共答案(字符串选项,布尔正确){
    option=opt;
    isCorrect=正确;
    }
    字符串选项;
    布尔值不正确;
    }
    Handler mHandler=新的Handler();
    final OnClickListener clickListener=new OnClickListener(){
    公共void onClick(视图v){
    答案ans=(答案)v.getTag();
    如果(ans.isCorrect){
    意向i=新意向(“androidaplikacije.toplo_hladno.Tacanodogvor”);
    星触觉(i);
    mHandler.postDelayed(mLaunchTaskFinish,1200);
    }
    否则{
    Intent i=新Intent(getApplicationContext(),PogresanOdgovor.class);
    i、 putExtra(“Tacanodogvor”,tacanOdg);
    星触觉(i);
    mHandler.postDelayed(mLaunchTaskFinish,2200);
    }
    }
    };
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);//全屏
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,WindowManager.LayoutParams.FLAG_全屏);
    setContentView(R.layout.pitanja_cigle);
    INICIRAJAVARIABLE();
    nextQuestion();
    }
    私有void nextQuestion(){
    计数器++;
    TestAdapter mDbHelper=新的TestAdapter(本);
    mDbHelper.createDatabase();
    试试{//Pokusava da otvori db
    mDbHelper.open();//baza otvorena
    游标c=mDbHelper.getPitanjacile(generateWhereClause());
    添加(c.getLong(0));
    列表标签=新的ArrayList();
    添加(新答案(c.getString(2),true));
    添加(新答案(c.getString(3),false));
    添加(新答案(c.getString(4),false));
    添加(新答案(c.getString(5),false));
    tacanOdg=c.getString(2);
    收藏。洗牌(标签);
    问题.setText(c.getString(1));
    b1.setText(labels.get(0.option));
    b1.setTag(labels.get(0));
    b1.设置clickListener(单击Listener);
    b2.setText(labels.get(1.option));
    b2.setTag(labels.get(1));
    b2.设置clickListener(单击Listener);
    b3.setText(labels.get(2.option));
    b3.setTag(labels.get(2));
    b3.设置clickListener(单击Listener);
    b4.setText(labels.get(3.option));
    b4.setTag(labels.get(3));
    b4.设置clickListener(单击Listener);
    }
    最后{//kada zavrsi sa koriscenjem baze podataka,zatvara db
    mDbHelper.close();
    }
    }
    private void变量(){
    Typeface naslov=Typeface.createFromAsset(getAssets(),“Lobster.ttf”);
    Typeface dugmad=Typeface.createFromAsset(getAssets(),“Bebas.ttf”);
    问题=(TextView)findViewById(R.id.tvpintanEcigle);
    b1=(按钮)findViewById(R.id.BodgCligle1);
    b2=(按钮)findViewById(R.id.bOdgCigle2);
    b3=(按钮)findViewById(R.id.bOdgCigle3);
    b4=(按钮)findViewById(R.id.bOdgCigle4);
    b1.设置字体(dugmad);
    b2.设置字体(dugmad);
    b3.设置字体(dugmad);
    b4.设置字体(dugmad);
    问题:setTypeface(纳斯洛夫);
    }
    }
    
    我觉得你的设计不太好。您不应该每次都查询数据库——相反,您可以在启动时加载问题,然后简单地将它们标记为“已使用”。此外,您还应该阅读有关管理活动生命周期和保存实例状态的内容。@Shade您的意思是只使用mAnsweredQuestions.add(c.getLong(0));在我的nextQuestion方法和活动范围中的rest db内容中?实际上我试过了,但在mDbHelper.createDatabase()上出现了错误;。你能举个例子吗?当然可以。请看这里-谢谢,我会看一看并与您保持联系。实际上,我没有收到任何此类代码。:)对不起,伙计,我
    public class Pitanja_Cigle extends Activity{
    
        public static String tacanOdg;
        int counter = 0;
    
        Button b1, b2, b3, b4;
        TextView question;
    
    
    LinkedList<Long> mAnsweredQuestions = new LinkedList<Long>();
    
        private String generateWhereClause(){
            StringBuilder result = new StringBuilder();
            for (Long l : mAnsweredQuestions){
                result.append(" AND _ID <> " + l);
            }
            return result.toString();
        }
    
        Runnable mLaunchTaskFinish = new Runnable() {
            public void run() {
                finish();
            }
         };
    
        private class Answer {
            public Answer(String opt, boolean correct) {
                option = opt;
                isCorrect = correct;
            }
    
            String option;
            boolean isCorrect;
        }
        Handler mHandler = new Handler();
    
        final OnClickListener clickListener = new OnClickListener() {
            public void onClick(View v) {
                Answer ans = (Answer) v.getTag();
                if (ans.isCorrect) {
                    Intent i = new Intent("rs.androidaplikacije.toplo_hladno.TACANODGOVOR");
                    startActivity(i);
                    mHandler.postDelayed(mLaunchTaskFinish,1200);
                }
                else{   
                    Intent i = new Intent(getApplicationContext(), PogresanOdgovor.class);
                    i.putExtra("tacanOdgovor", tacanOdg);
                    startActivity(i);
                    mHandler.postDelayed(mLaunchTaskFinish,2200);
                }
            }
         };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            requestWindowFeature(Window.FEATURE_NO_TITLE);   //full screen
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    
            setContentView(R.layout.pitanja_cigle);
    
            InicirajVariable();
    
            nextQuestion();
        }
    
        private void nextQuestion() {
            counter++;
    
            TestAdapter mDbHelper = new TestAdapter(this);
            mDbHelper.createDatabase();
    
            try{    //Pokusava da otvori db
    
                mDbHelper.open();  //baza otvorena
    
                Cursor c = mDbHelper.getPitanjaCigle(generateWhereClause());
    
                mAnsweredQuestions.add(c.getLong(0));
    
                List<Answer> labels = new ArrayList<Answer>();
    
                labels.add(new Answer(c.getString(2), true));
                labels.add(new Answer(c.getString(3), false));
                labels.add(new Answer(c.getString(4), false));
                labels.add(new Answer(c.getString(5), false));
    
                tacanOdg = c.getString(2);
    
                Collections.shuffle(labels);
    
                question.setText(c.getString(1));
    
                b1.setText(labels.get(0).option);
                b1.setTag(labels.get(0));
                b1.setOnClickListener(clickListener);
    
                b2.setText(labels.get(1).option);
                b2.setTag(labels.get(1));
                b2.setOnClickListener(clickListener);
    
                b3.setText(labels.get(2).option);
                b3.setTag(labels.get(2));
                b3.setOnClickListener(clickListener);
    
                b4.setText(labels.get(3).option);
                b4.setTag(labels.get(3));
                b4.setOnClickListener(clickListener);
    
        }
    
        finally{    // kada zavrsi sa koriscenjem baze podataka, zatvara db
            mDbHelper.close();
        }
        }
    
        private void InicirajVariable() {
            Typeface naslov = Typeface.createFromAsset(getAssets(), "Lobster.ttf");
            Typeface dugmad = Typeface.createFromAsset(getAssets(), "Bebas.ttf");
    
            question = (TextView) findViewById(R.id.tvPitanjeCigle);
            b1 = (Button) findViewById(R.id.bOdgCigle1);
            b2 = (Button) findViewById(R.id.bOdgCigle2);
            b3 = (Button) findViewById(R.id.bOdgCigle3);
            b4 = (Button) findViewById(R.id.bOdgCigle4);
    
            b1.setTypeface(dugmad);
            b2.setTypeface(dugmad);
            b3.setTypeface(dugmad);
            b4.setTypeface(dugmad);
            question.setTypeface(naslov);
    
        }
    
    }