2013-12-09 84 views
0

我的代碼如下:創建媒體播放器,串源

cry = MediaPlayer.create(this, R.raw.bulbasaur); 

我想,雖然是這樣的:

cry = MediaPlayer.create(this, ("R.raw."+pokemon); 

這樣一來,了when他的活動是通過一個特定的小寵物的數量,它將加載適當的聲音文件。 哪裏pokemon是特定口袋妖怪聲音文件的名稱。 我曾嘗試過使用Uri,但我不確定我是否正確地做了這件事。

我的OnCreate方法可以在下面看到。 謝謝你的時間〜

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //Removes the title 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    //Sets the screen size to full-screen 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.poke_layout); 

    Bundle getId = getIntent().getExtras(); 
    //get the position integer from MenuActivity 
    int position = getId.getInt("id"); 


    //Calls the function that initialises all UI items. 
    initVars(); 
    //Set up variable from JSON field. 
    getPokes(position); 

    /**Defines the cry file**/ 
    cry = MediaPlayer.create(this, R.raw.bulbasaur); 

    pPic.setImageResource(getImage(this, local)); 

    cry.start(); 
} 

編輯: 正是如此,這是明確的:我加載的小寵物將文件名從JSON文件中的變量「本地」。我的目標是使用這個變量來然後加載相應的文件

+0

我想你想要做的是讓地圖無論是口袋妖怪名稱或ID來R.raw一個* IDS。如果它們很少,可能很容易在創建cry對象之前執行if/else或switch語句。我認爲如果你可以可靠地重現另一個問題(關於圖像),你應該創建另一個SO問題。聽起來沒有關係。 – Matt

+0

@Matt圖像問題與JSON錯誤。我修好了它。 – Inafune

+0

可能重複[從值獲取資源ID](http://stackoverflow.com/questions/3904531/get-resource-id-from-value) – laalto

回答

1

你可以做這樣的事情:從R文件

static Map<String, Integer> idReferences = new HashMap<String,Integer>(); 
static { 
    idReferences.put("Bulbasaur", R.raw.bulbasaur); 
} 

MediaPlayer.create(this, idReferences.get("Bulbasaur")); 

參考生成,所以你不想直接引用他們的汽車。最好是拿一張清單或一張地圖,間接引用它們。像上面一樣。

如果你想要一個「位置」的參考,而不是名字,只是用的Integer而不是String作爲地圖的關鍵。

參考文獻:

Accessing Android Resources

What is a Java Map

+0

這是一個很好的答案,但也許是一個很好的添加對於可能不知道Map是什麼的人的描述/解釋位。 – Tyler

+1

@TylerAndFriends喜歡這樣;-) – Blundell