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