मैंने हाल ही में बाजार स्थान पर एक ऐप प्रकाशित किया है। डेवलपर्स कंसोल से ऐसा लगता है कि मेरे उपयोगकर्ताओं में से 1-2% इस समस्या का सामना कर रहे हैं। 1-2% छोटा है लेकिन लोग टिप्पणी छोड़ने के इच्छुक हैं, जब कुछ ऐसा नहीं करता है, जो ऐसा करता है जो डाउनलोड को नकारात्मक रूप से प्रभावित कर सकता है।SQLiteException - केवल कुछ डिवाइसों पर होता है
दुर्भाग्य से डेवलपर्स सांत्वना केवल 'अन्य' के रूप में मंच को सूचीबद्ध करता है, लेकिन मेरे एप्लिकेशन SDK के साथ 1.6+ उन लोगों के लिए उपलब्ध है। मैं इस मुद्दे को फिर से बनाने में भी असमर्थ हूं और किसी भी उपयोगकर्ता ने मुझसे सीधे संपर्क नहीं किया है, इसलिए मैं उन डिवाइसों के बारे में और जानकारी प्राप्त करने में असमर्थ हूं जिन पर यह विफल रहता है।
यहाँ ढेर
List<Question> questions = myDbHelper.getQuestionSet(diff, numQuestions);
को
android.database.sqlite.SQLiteException: no such table: QUESTIONS: , while compiling: SELECT * FROM QUESTIONS WHERE DIFFICULTY=2 ORDER BY RANDOM() LIMIT 20
at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91)
at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:80)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1434)
at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1404)
at com.app.myapp.db.DBHelper.getQuestionSet(DBHelper.java:140)
at com.app.myapp.SplashActivity.getQuestionSetFromDb(SplashActivity.java:109)
at com.app.myapp.SplashActivity.onClick(SplashActivity.java:58)
at android.view.View.performClick(View.java:2421)
at android.view.View$PerformClick.run(View.java:8867)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:5068)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)
getQuestionSetFromDb (SplashActivity.java:109) संदर्भित करता है कौन सा
public List<Question> getQuestionSet(int difficulty, int numQ){
List<Question> questionSet = new ArrayList<Question>();
Cursor c = myDataBase.rawQuery("SELECT * FROM QUESTIONS WHERE DIFFICULTY=" + difficulty +
" ORDER BY RANDOM() LIMIT " + numQ, null);
while (c.moveToNext()){
//Log.d("QUESTION", "Question Found in DB: " + c.getString(1));
Question q = new Question();
q.setQuestion(c.getString(1));
q.setAnswer(c.getString(2));
q.setOption1(c.getString(3));
q.setOption2(c.getString(4));
q.setOption3(c.getString(5));
q.setRating(difficulty);
questionSet.add(q);
}
return questionSet;
}
}
को संदर्भित करता है किसी को भी पता है है का एक संभावित कारण? यह अजीब बात है कि यह केवल थोड़ी सी मात्रा के साथ हो रहा है और एसडीके स्तर/डिवाइस का उपयोग करने में असमर्थ होने के कारण वे इसे और अधिक कठिन बनाते हैं।
किसी भी मदद की सराहना की
संपादित करें: कैसे db बनाई गई है शामिल कर रहा हूँ मैं प्रतिक्रियाओं के कारण।
सबसे पहले, मेरी गतिविधि यह है
private List<Question> getQuestionSetFromDb() throws Error {
int diff = getDifficultySettings();
int numQuestions = getNumQuestions();
DBHelper myDbHelper = new DBHelper(this);
try {
myDbHelper.createDataBase();
} catch (IOException ioe) {
throw new Error("Unable to create database");
}
try {
myDbHelper.openDataBase();
}catch(SQLException sqle){
throw sqle;
}
List<Question> questions = myDbHelper.getQuestionSet(diff, numQuestions);
myDbHelper.close();
return questions;
}
myDBhelper.createdatabase() कॉल
public void createDataBase() throws IOException{
boolean dbExist = checkDataBase();
if(!dbExist)
{
//By calling this method and empty database will be created into the default system path
//of your application so we are gonna be able to overwrite that database with our database.
this.getReadableDatabase();
try {
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}
checkDatabase()
private boolean checkDataBase(){
SQLiteDatabase checkDB = null;
try{
String myPath = DB_PATH + DB_NAME;
checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
}catch(SQLiteException e){
//database does't exist yet.
}
if(checkDB != null){
checkDB.close();
}
return checkDB != null ? true : false;
}
(यह एक ही तरीका है जिसके दुर्घटना का कारण बनता है)
copyDatabase()
private void copyDataBase() throws IOException{
//Open your local db as the input stream
InputStream myInput = myContext.getAssets().open(DB_NAME);
// Path to the just created empty db
String outFileName = DB_PATH + DB_NAME;
//Open the empty db as the output stream
OutputStream myOutput = new FileOutputStream(outFileName);
//transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer))>0){
myOutput.write(buffer, 0, length);
}
//Close the streams
myOutput.flush();
myOutput.close();
myInput.close();
}
चर
private static String DB_PATH = "/data/data/com.app.myapp/databases/";
private static String DB_NAME = "questionsDb";
private SQLiteDatabase myDataBase;
private final Context myContext;
Apoligies, मैं वास्तव में एक लापता "प्रश्न" डेटाबेस के बारे में इस शुरू में
आप हाल ही में डीबी स्कीमा प्रश्न तालिका शामिल करने के लिए उन्नयन किया? – hooked82
नहीं, डेटाबेस टेबल हमेशा एक ही रहे हैं। चूंकि मैंने बाजार में अपलोड किया है, इसलिए कोई डेटाबेस परिवर्तन नहीं हुआ है। – PapaJon
अच्छी तरह से त्रुटि स्पष्ट लगता है; आपकी मेज नहीं मिल सकती है। इसलिए मैं उस हिस्से को देखना शुरू कर दूंगा जहां यह बनाया जाता है, यह सुनिश्चित कर लें कि यह बिल्कुल भी बनाया जाए। यह भी एक विशिष्ट त्रुटि को पकड़ने का विचार हो सकता है और फिर यदि ऐसा होता है तो तालिका बनाएं। –