2013-07-10 4 views
2

현재 간단한 응용 프로그램 퀴즈를 만들려고합니다. 각 응용 프로그램에 4 개의 답변이 첨부 된 이미지가 있습니다. 내가 방법을 발견했습니다 Chuck Application Part 1안드로이드 응용 프로그램 폴더에서 이미지 경로 저장 및 검색 미리 생성 된 SQLite 데이터베이스 및 이미지보기로 이미지 설정

: 나는

지금까지 내가이 튜토리얼 여기에 각 질문 구유에 이미지없이 질문을하는 방법을 알아낼 수있는 데이터베이스에 저장하는 약 100 ++ 이미지가 아래의 링크에서 SQLite 데이터베이스의 텍스트 필드에 대한 경로를 하드 코딩하여 만듭니다.

Saving resources path in SQLite

은 위의 링크에 따르면, 그는

그것이 사실이라면,이다, 그는 SQLite는 데이터베이스 내부에 텍스트 필드에 "R.drawable.picture1"를 입력하여 이미지의 참조를 절약 할 것을 주장 올바른 방법 (드로어 블 폴더에 이미지를 저장하고 텍스트 필드에 경로를 쓰는 방법)? 그 다음이 아니라면 내가 이미지 경로 데이터베이스에서 필드를 취득하기위한 (세터와 게터 방법 설정)을 구성 어떻게

?

, 그렇게 할 수있는 올바른 방법과 나는를 설정하는 방법 이미지 뷰 경로?

어떤 도움 UPDATE

는 그래서 방법 참조 문자열을 사용하는 또 다른 링크에서 얻은 사전에 고마워요을 이해하고 난 다음 문자열을 편집 할 위치 ImageI.getImage1();

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) 

나는 데이터베이스에서 arraylist를 가져 와서 그 사실을 깨달았습니다. 오 여기 난 단지 DB에 이미지 이름을 저장 한 다음 context.getResources().getIdentifier()와 자원 식별자를 얻을 것 내 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; 
} 

+0

ur 샘플 퀴즈 앱의 소스 코드를 공유 할 수 있습니까? –

답변

0

입니다. this 비슷한 질문을 확인하십시오.

+0

답장을 보내 주셔서 감사합니다. 좀 더 구체적으로 표현해 주실 수 있습니까? 내가 어떻게 할 수 있니? context.getResources(). getIdentifier()를 커서에 두는 방법이 있습니까? @ SimonSays –

+0

아마도 귀하의 질문을 완전히 이해하지 못합니다. 1. DB에서 이미지 이름을 가져오고, 2. 이름에서 이미지 리소스 ID를 가져오고, 3. 이미지 리소스를 ImageView로 설정합니다. 귀하의 게시물에있는 SO 링크가하는 일이 그다지 많지 않습니까? 문제가 정확히 무엇입니까?그리고 "context.getResources(). getIdentifier()를 커서에 넣는다"는 것은 무엇을 의미합니까? 커서에 아무것도 넣을 수 없습니까? 식별자를 DB에 저장 하시겠습니까? 그렇게하지 마! 식별자는 앱을 빌드 할 때마다 바뀔 수 있습니다. – SimonSays

+0

나는 정말로 안드로이드에 익숙하다. 그래서 내 질문에 곰곰이 생각해보고, 내가 틀렸다면 예 1,2, & 3이 맞다. 나의 문제는 내가 할 올바른 방법을 알고있다. 제발 이 코멘트를 게시 할 때까지 내가 get.Resources(). getIdentifier를 알고 있기 때문에 1,2, 3 번 번호를하는 법을 배웠으므로 편집 된 질문을 확인하십시오 @SimonSays –