1

私は現在、4つの答えを持つ各質問に画像が添付されている簡単なアプリケーションクイズを作成しようとしているので、データベースに保存する画像が約100++あります

これまでのところ、このチュートリアルを通じて、各質問に画像を表示せずに質問を作成する方法を理解できます: Chuck Application Part 1

画像パスを保存する方法は、以下のリンクから SQLite データベースのテキスト フィールドへのパスをハードコーディングすることであることがわかりました。

SQLite でのリソース パスの保存

上記のリンクによると、彼は、SQLite データベース内のテキスト フィールドに「R.drawable.picture1」と入力して、画像の参照を保存すると述べています。

それが本当なら、それは正しい方法ですか(画像を描画可能なフォルダに保存し、テキストフィールドへのパスを書き込むことによって)?そうでない場合、そうする正しい方法は何ですか、

データベースからフィールドを取得するためのイメージ パス (setter メソッドと getter メソッドの設定) を構築するにはどうすればよいですか?,

イメージビューへのパスを設定するにはどうすればよいですか?

どんな助けでも大歓迎です、事前に感謝します

アップデート

だから私は別のリンクから参照用の文字列を使用する方法を学び、以下の文字列を編集しました。イメージ名を含むデータベースの行を参照する

private void showImage() {
        String imagea = ImageI.getImage1();
        int imageResource = getResources().getIdentifier(imagea , "drawable", context.getPackageName());
        ImageView gambar = (ImageView) findViewById(R.id.imagetest);
         Drawable image = getResources().getDrawable(imageResource);
         gambar.setImageDrawable(image);
    }

しかし、私はいつも近くに力を入れています。どこで間違ったのですか?
これまでのところ、データベースの行に書き込もうとしました

R.Drawable.picture
Drawable/picture
picture

しかし、何も機能しません....

これは私の質問です

    public List<ImageQuestions> getImageQuestionSet(int ingroup, int numQ) {
        List<ImageQuestions> questionSet = new ArrayList<ImageQuestions>();
        Cursor c = myDataBase.rawQuery("SELECT * FROM IMAGETEST WHERE INGROUP=" + ingroup +
                " ORDER BY RANDOM() LIMIT " + numQ, null);
         while (c.moveToNext()){      
                //Log.d("IMAGEQUESTIONS", "Images Found in DB: " + c.getString(1));
               ImageQuestions I = new ImageQuestions();
               I.setQuestion(c.getString(1));
               I.setImage1(c.getString(2));
               I.setAnswer(c.getString(3));
               I.setOption1(c.getString(4));
               I.setOption2(c.getString(5));
               I.setGroup(ingroup);
               questionSet.add(I);
           }         
           return questionSet;
        }
}

これは私の丸太猫です

07-18 03:28:41.283: W/dalvikvm(647): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
07-18 03:28:41.293: E/AndroidRuntime(647): FATAL EXCEPTION: main
07-18 03:28:41.293: E/AndroidRuntime(647): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
07-18 03:28:41.293: E/AndroidRuntime(647):  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
07-18 03:28:41.293: E/AndroidRuntime(647):  at java.util.ArrayList.get(ArrayList.java:311)
07-18 03:28:41.293: E/AndroidRuntime(647):  at learning.everything.quiz.GamePlayI.getNextQuestion(GamePlayI.java:113)
07-18 03:28:41.293: E/AndroidRuntime(647):  at learning.everything.BigAss.onCreate(BigAss.java:32)
07-18 03:28:41.293: E/AndroidRuntime(647):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-18 03:28:41.293: E/AndroidRuntime(647):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)  

データベースから配列リストを取得することが原因であることに気付いたので、ここに私の GamePlayI クラスがあります

    public class GamePlayI {

    private List<ImageQuestions> questions = new ArrayList<ImageQuestions>();   

    public void setQuestions(List<ImageQuestions> questions) {
        this.questions = questions;
        }


    public void addQuestions(ImageQuestions I) {
        this.questions.add(I);
    }


    public List<ImageQuestions> getQuestions() {
        return questions;
    }


    public ImageQuestions getNextQuestion() {

        //get the question 
        //below is line 113\\
        ImageQuestions next = questions.get(this.getRound());
        //update the round number to the next round
        this.setRound(this.getRound()+1);
        return next;

    }

}

    public void setNumRounds(int numRounds) {
    this.numRounds = numRounds;
        }

    public int getNumRounds() {
    return numRounds;
}
4

1 に答える 1

-1

イメージ名のみをデータベースに保存してから、リソース識別子を取得しcontext.getResources().getIdentifier()ます。この同様の質問を確認してください。

于 2013-07-10T22:36:08.523 に答える