Habe es jetzt einigermaßen hinbekommen zu meiner Zufriedenheit ... im Emulator
Wenn ich das auf meinem Desire ausprobiere crasht die App, weil die Datenbank nicht gelesen wird? (meine ArrayList wo ich die Fragen abspeichere bleibt leer, ich vermute das einfach das rüberkopieren aus dem Assets Ordner nicht klappt oder der Pfad nicht stimmt wo ich die DB lese, dazu mal paar code zeilen)
Der Crash findet statt in der Funktion getRandomQuestion() (wohl weil das Array leer ist und da irgendwo eine NullpointerException auftaucht, ka), aber ist ja uach egal... meine Datenbank liegt im assets ordner als "fragen.sqlite".
Meine Deutschen + Englischen Bezeichnungen müsst ihr garnicht erst kommentieren :p
Wichtiger Code aus der einen Datei:
1public static final String MY_STORAGE = Environment.getExternalStorageDirectory().toString()+"/AllgemeinWissen/"; //+ filename
2 public static final String WEB_LINK = "http://universe-gamingcentral.com/data.sqlite";
3 public static final String DATA_FILE = "databases/fragen.sqlite";
4 public static final String MY_INTERNAL_STORAGE = "/data/data/de.tm.android.allgemeinwissen/";
5
6private void copyoverdatabase() {
7 AssetManager am = getResources().getAssets();
8 try {
9 InputStream is = am.open("fragen.sqlite");
10 BufferedInputStream bis = new BufferedInputStream(is);
11 ByteArrayBuffer baf = new ByteArrayBuffer(50);
12
13 int c;
14 while((c = bis.read()) != -1)
15 {
16 baf.append(c);
17 }
18 byte[] buffer = baf.toByteArray();
19 File file = new File(Hauptmenu.MY_INTERNAL_STORAGE);
20 file.mkdirs();
21 file.createNewFile();
22 FileOutputStream fos = new FileOutputStream(file);
23 fos.write(buffer);
24 fos.close();
25 bis.close();
26 is.close();
27
28
29 } catch (IOException e1) {
30 e1.printStackTrace();
31 }
32
33 }
Hier Teile der anderen Datei:
1@Override
2 public void onCreate(Bundle savedInstanceState) {
3{
4SQLiteDatabase myDB = null;
5 try {
6
7 // Create the Database (no Errors if it already exists)
8 myDB = this.openOrCreateDatabase(Hauptmenu.MY_STORAGE + Hauptmenu.DATA_FILE, MODE_PRIVATE, null );
9 Cursor c = myDB.rawQuery("SELECT * FROM fragenkatalog;", null);
10 startManagingCursor(c);
11
12
13 //read through the result of the query and generate questions
14 while(c.moveToNext())
15 {
16 int id = c.getInt(c.getColumnIndex("id"));
17 int category = c.getInt(c.getColumnIndex("category"));
18 String question = c.getString(c.getColumnIndex("question"));
19 int correct = c.getInt(c.getColumnIndex("correct_answer"));
20
21 String[] answer = new String[] {c.getString(c.getColumnIndex("answer1")), c.getString(c.getColumnIndex("answer2")),c.getString(c.getColumnIndex("answer3")),c.getString(c.getColumnIndex("answer4"))};
22 Frage frage = new Frage(id,question, answer, correct, category);
23 fragenKatalog.add(frage);
24 }
25
26
27 }
28 catch(Exception e)
29 {
30 Log.d("Constructor", e.toString());
31 }
32 finally
33 {
34 if (myDB != null)
35 myDB.close();
36 }
37
38 nextQuestion();
39}
1private Frage getRandomQuestion()
2 {
3
4 Frage frage = null;
5 int maxQuestions = fragenKatalog.size();
6
7 Random randomGenerator = new Random();
8
9 int randomQuestion = randomGenerator.nextInt(maxQuestions);
10 frage = fragenKatalog.get(randomQuestion);
11
12 if(answeredCorrect.size()==fragenKatalog.size())
13 {
14 answeredCorrect.clear();
15 Toast.makeText(getApplicationContext(), R.string.all_questions_answered, Toast.LENGTH_SHORT).show();
16 return frage;
17 }
18
19 for(int i=0;i<answeredCorrect.size();i++)
20 {
21 Frage _frage = answeredCorrect.get(i);
22 if(frage.id==_frage.id)
23 return getRandomQuestion();
24 }
25
26 return frage;
27
28
29
30
31 };
32
33 private void nextQuestion()
34 {
35 Toast.makeText(getApplicationContext(), "Anzahl Fragen: "+fragenKatalog.size(), Toast.LENGTH_SHORT).show();
36
37 //first question to be answered?
38 if(currentQuestion==null)
39 {
40 //currentQuestion = getRandomQuestion();
41 if(currentQuestion!=null)
42 {
43 tvQuestion.setText(currentQuestion.question);
44 rb1.setText(currentQuestion.answers[0]);
45 rb2.setText(currentQuestion.answers[1]);
46 rb3.setText(currentQuestion.answers[2]);
47 rb4.setText(currentQuestion.answers[3]);
48 }
49
50 }
51 else //not the first question that is going to be answered
52 {
53 answeredCorrectly();
54 currentQuestion = getRandomQuestion();
55 tvQuestion.setText(currentQuestion.question);
56 rb1.setText(currentQuestion.answers[0]);
57 rb2.setText(currentQuestion.answers[1]);
58 rb3.setText(currentQuestion.answers[2]);
59 rb4.setText(currentQuestion.answers[3]);
60
61 // Get the ViewFlipper from the layout
62 ViewFlipper vf = (ViewFlipper) findViewById(R.id.details02);
63 // Set an animation from res/anim: I pick push left out
64 vf.setAnimation(AnimationUtils.loadAnimation(vf.getContext(), R.anim.slide_left));
65 vf.showNext();
66 }
67 }
edit: fehler gefunden ... hatte beim kopieren nur auf den ordner zugegriffen und nicht auf die datei die ich erzeugen möchte (pfad war ein ordner)
— geändert am 13.11.2010, 13:22:18
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.