- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
<分区>
我正在尝试创建一个应用程序,让您可以进行测验,例如世界历史测验。在主要 Activity 中,用户按下回车按钮选择测验的类别,假设我们选择世界历史,那么它应该去世界历史 Activity 但它崩溃了。到目前为止,这是我的代码,不知道它有什么问题:
数据库处理器.java
public class DatabaseHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "quiz";
private static final String TABLE_NAME = "worldhistory";
private static final String KEY_ID = "id";
private static final String QUESTIONS = "question";
private static final String ANSWER = "answer";
private static final String OPTIONA = "optiona";
private static final String OPTIONB = "optionb";
private static final String OPTIONC = "optionc";
private static final String OPTIOND = "optiond";
private SQLiteDatabase dba;
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " ( "
+ KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + QUESTIONS + " TEXT, "
+ ANSWER + " TEXT, " + OPTIONA + " TEXT, " + OPTIONB + " TEXT, " + OPTIONC
+ " TEXT, " + OPTIOND + " TEXT)";
db.execSQL(CREATE_TABLE);
addQuestions();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXITS " + TABLE_NAME);
onCreate(db);
}
// creating the questions, options, and answers
private void addQuestions() {
Question q1 = new Question("World War I began in which year?", "1923",
"1938", "1917", "1914", "D");
this.addQuestion(q1);
Question q2 = new Question("Adolf Hitler was born in which country?",
"France", "Germany", "Austria", "Hungary", "C");
this.addQuestion(q2);
//add more questions
}
// addding new questions to db
public void addQuestion(Question question) {
ContentValues values = new ContentValues();
values.put(QUESTIONS, question.getQuestion());
values.put(ANSWER, question.getAnswer());
values.put(OPTIONA, question.getOptionA());
values.put(OPTIONB, question.getOptionB());
values.put(OPTIONC, question.getOptionC());
values.put(OPTIOND, question.getOptionD());
dba.insert(TABLE_NAME, null, values);
}
public List<Question> getAllQuestions() {
List<Question> questionList = new ArrayList<Question>();
String query = "SELECT * FROM " + TABLE_NAME;
dba = this.getReadableDatabase();
Cursor cursor = dba.rawQuery(query, null);
if (cursor.moveToFirst()) {
do {
Question quest = new Question();
quest.setID(cursor.getInt(0));
quest.setQuestion(cursor.getString(1));
quest.setAnswer(cursor.getString(2));
quest.setOptionA(cursor.getString(3));
quest.setOptionB(cursor.getString(4));
quest.setOptionC(cursor.getString(5));
quest.setOptionD(cursor.getString(6));
questionList.add(quest);
} while (cursor.moveToNext());
}
cursor.close();
dba.close();
return questionList;
}
public int rowCount() {
int row = 0;
String query = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query, null);
row = cursor.getCount();
cursor.close();
return row;
}
}
问题.java
public class Question {
private int ID;
private String Question, optionA, optionB, optionC, optionD, Answer;
public Question() {
ID = 0;
Question = "";
optionA = "";
optionB = "";
optionC = "";
optionD = "";
Answer = "";
}
public Question(String Question, String optionA, String optionB, String optionC,
String optionD, String Answer) {
this.Question = Question;
this.optionA = optionA;
this.optionB = optionB;
this.optionC = optionC;
this.optionD = optionD;
this.Answer = Answer;
}
public int getID() {
return ID;
}
public String getQuestion() {
return Question;
}
public String getOptionA() {
return optionA;
}
public String getOptionB() {
return optionB;
}
public String getOptionC() {
return optionC;
}
public String getOptionD() {
return optionD;
}
public String getAnswer() {
return Answer;
}
public void setID(int ID) {
this.ID = ID;
}
public void setQuestion(String Question) {
this.Question = Question;
}
public void setOptionA(String optionA) {
this.optionA = optionA;
}
public void setOptionB(String optionB) {
this.optionB = optionB;
}
public void setOptionC(String optionC) {
this.optionC = optionC;
}
public void setOptionD(String optionD) {
this.optionD = optionD;
}
public void setAnswer(String answer) {
Answer = answer;
}
}
世界历史.java
public class WorldHistory extends AppCompatActivity {
List<Question> questionList;
int score = 0;
int questionID = 0;
Question currentQuestion;
TextView txtQuestion;
RadioButton rbtnA, rbtnB, rbtnC, rbtnD;
Button btnNext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_world_history);
DatabaseHandler dba = new DatabaseHandler(this);
questionList = dba.getAllQuestions();
currentQuestion = questionList.get(questionID);
txtQuestion = (TextView) findViewById(R.id.txtQuestion);
rbtnA = (RadioButton) findViewById(R.id.rtbOptionA);
rbtnB = (RadioButton) findViewById(R.id.rtbOptionB);
rbtnC = (RadioButton) findViewById(R.id.rtbOptionC);
rbtnD = (RadioButton) findViewById(R.id.rtbOptionD);
btnNext = (Button) findViewById(R.id.btnNext);
setQuestionView();
}
private void setQuestionView() {
txtQuestion.setText(currentQuestion.getQuestion());
rbtnA.setText(currentQuestion.getOptionA());
rbtnB.setText(currentQuestion.getOptionB());
rbtnC.setText(currentQuestion.getOptionC());
rbtnD.setText(currentQuestion.getOptionD());
questionID++;
}
}
这是错误信息:
07-10 20:04:11.346 2514-2514/com.example.nasimahmed.quizgame E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.nasimahmed.quizgame, PID: 2514
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.nasimahmed.quizgame/com.example.nasimahmed.quizgame.WorldHistory}: java.lang.NullPointerException: Attempt to invoke virtual method 'long android.database.sqlite.SQLiteDatabase.insert(java.lang.String, java.lang.String, android.content.ContentValues)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'long android.database.sqlite.SQLiteDatabase.insert(java.lang.String, java.lang.String, android.content.ContentValues)' on a null object reference
at com.example.nasimahmed.quizgame.DatabaseHandler.addQuestion(DatabaseHandler.java:81)
at com.example.nasimahmed.quizgame.DatabaseHandler.addQuestions(DatabaseHandler.java:61)
at com.example.nasimahmed.quizgame.DatabaseHandler.onCreate(DatabaseHandler.java:46)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)
at com.example.nasimahmed.quizgame.DatabaseHandler.getAllQuestions(DatabaseHandler.java:89)
at com.example.nasimahmed.quizgame.WorldHistory.onCreate(WorldHistory.java:29)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
我正在通过 labrepl 工作,我看到了一些遵循此模式的代码: ;; Pattern (apply #(apply f %&) coll) ;; Concrete example user=> (a
我从未向应用商店提交过应用,但我会在不久的将来提交。 到目前为止,我对为 iPhone 而非 iPad 进行设计感到很自在。 我了解,通过将通用PAID 应用放到应用商店,客户只需支付一次就可以同时使
我有一个应用程序,它使用不同的 Facebook 应用程序(2 个不同的 AppID)在 Facebook 上发布并显示它是“通过 iPhone”/“通过 iPad”。 当 Facebook 应用程序
我有一个要求,我们必须通过将网站源文件保存在本地 iOS 应用程序中来在 iOS 应用程序 Webview 中运行网站。 Angular 需要服务器来运行应用程序,但由于我们将文件保存在本地,我们无法
所以我有一个单页客户端应用程序。 正常流程: 应用程序 -> OAuth2 服务器 -> 应用程序 我们有自己的 OAuth2 服务器,因此人们可以登录应用程序并获取与用户实体关联的 access_t
假设我有一个安装在用户设备上的 Android 应用程序 A,我的应用程序有一个 AppWidget,我们可以让其他 Android 开发人员在其中以每次安装成本为基础发布他们的应用程序推广广告。因此
Secrets of the JavaScript Ninja中有一个例子它提供了以下代码来绕过 JavaScript 的 Math.min() 函数,该函数需要一个可变长度列表。 Example:
当我分别将数组和对象传递给 function.apply() 时,我得到 NaN 的 o/p,但是当我传递对象和数组时,我得到一个数字。为什么会发生这种情况? 由于数组也被视为对象,为什么我无法使用它
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章ASP转换格林威治时间函数DateDiff()应用由作者收集整理,如果你
我正在将列表传递给 map并且想要返回一个带有合并名称的 data.frame 对象。 例如: library(tidyverse) library(broom) mtcars %>% spl
我有一个非常基本的问题,但我不知道如何实现它:我有一个返回数据框,其中每个工具的返回值是按行排列的: tmp<-as.data.frame(t(data.frame(a=rnorm(250,0,1)
我正在使用我的 FB 应用创建群组并邀请用户加入我的应用群组,第一次一切正常。当我尝试创建另一个组时,出现以下错误: {"(OAuthException - #4009) (#4009) 在有更多用户
我们正在开发一款类似于“会说话的本”应用程序的 child 应用程序。它包含大量用于交互式动画的 JPEG 图像序列。 问题是动画在 iPad Air 上播放正常,但在 iPad 2 上播放缓慢或滞后
我关注 clojure 一段时间了,它的一些功能非常令人兴奋(持久数据结构、函数式方法、不可变状态)。然而,由于我仍在学习,我想了解如何在实际场景中应用,证明其好处,然后演化并应用于更复杂的问题。即,
我开发了一个仅使用挪威语的应用程序。该应用程序不使用本地化,因为它应该仅以一种语言(挪威语)显示。但是,我已在 Info.plist 文件中将“本地化 native 开发区域”设置为“no”。我还使用
读完 Anthony's response 后上a style-related parser question ,我试图说服自己编写单体解析器仍然可以相当紧凑。 所以而不是 reference ::
multicore 库中是否有类似 sapply 的东西?还是我必须 unlist(mclapply(..)) 才能实现这一点? 如果它不存在:推理是什么? 提前致谢,如果这是一个愚蠢的问题,我们深表
我喜欢在窗口中弹出结果,以便更容易查看和查找(例如,它们不会随着控制台继续滚动而丢失)。一种方法是使用 sink() 和 file.show()。例如: y <- rnorm(100); x <- r
我有一个如下所示的 spring mvc Controller @RequestMapping(value="/new", method=RequestMethod.POST) public Stri
我正在阅读 StructureMap关于依赖注入(inject),首先有两部分初始化映射,具体类类型的接口(interface),另一部分只是实例化(请求实例)。 第一部分需要配置和设置,这是在 Bo
我是一名优秀的程序员,十分优秀!