2010-10-11 68 views
5

我爲我的Android項目創建了一個名爲「聲音」的自定義類,我希望能夠從我的活動中調用它。是我班的內容如下:導入我的自定義類並調用它的方法?

package com.mypackage; 

import java.util.HashMap; 

import android.content.Context; 
import android.media.SoundPool; 

public class Sounds { 

private static boolean sound = true; 

private static final int FLIP_SOUND = 1; 

private static Context context; 
private static SoundPool soundPool; 
private static HashMap<Integer, Integer> soundPoolMap; 

public static void initSounds() { 
    soundPoolMap.put(FLIP_SOUND, soundPool.load(context, R.raw.flip, 1)); 
} 

public static void playFlip() { 
     soundPool.play(soundPoolMap.get(FLIP_SOUND), 1, 1, 1, 0, 1); 
} 

public static void setSound(Boolean onOff) { 
    sound = onOff; 
} 
} 

在我的主Activity類我試圖導入類,創建它的一個實例,但我想我只是不理解它是如何做。請有人指出我正確的方向嗎?

+0

我如何事情在短短几年內就會改變。看起來這個問題仍然很受歡迎,人們也遇到類似的問題,我想像的那些新開發的Android開發人員,就像我當時那樣。我正在看着這個想知道我是如何期望它工作的。在上面的代碼中,顯而易見的事情是上下文永遠不會被初始化(實際上也不是hte字段),該類要麼需要構造函數(以及非靜態字段),要麼需要必要的參數(如上下文,soundpool和soundPoolMap)你在這裏看到的直接傳遞給靜態方法。否則,它們將始終爲空。 – Hamid 2013-08-08 11:52:13

回答

9

編輯:從您的Activity類:

private Sounds s; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);   
     s = new Sounds(this); 
     s.initSounds(); 
} 

您也可以用構造你的自定義類發送的上下文。

刪除靜態變量和方法:

public class Sounds { 

private boolean sound = true; 

private int FLIP_SOUND = 1; 

private Context context; 
private SoundPool soundPool; 
private HashMap soundPoolMap; 

public Sounds(Context context){ 
    this.context = context; 
    soundPoolMap = new HashMap(); 
    soundPool = new SoundPool(0, AudioManager.STREAM_MUSIC, 0); 
} 

public void initSounds() { 
    soundPoolMap.put(FLIP_SOUND, soundPool.load(context, R.raw.flip, 1)); 
} 

public void playFlip() { 
    soundPool.play(soundPoolMap.get(FLIP_SOUND), 1, 1, 1, 0, 1); 
} 

public void setSound(Boolean onOff) { 
    sound = onOff; 
} 
} 
+0

我已經嘗試了所有在這裏指定的東西,我的最後一招是「靜態」的原因,在建議頂部之後,我將它們移除了,並且程序在活動嘗試調用s.initSounds()時仍然強制關閉。 ;我假設問題在於上下文,因爲它給了我以前的問題。你能建議我應該如何正確傳遞上下文嗎? – Hamid 2010-10-11 15:03:13

+0

@哈米德:我編輯了我的答案。 – Wroclai 2010-10-11 15:14:53

+0

謝謝,我已經做到了這一點,但程序仍然強制關閉,當我打電話給initSounds();如果我對此評論它可以正常工作。我不確定它是否有相關性,但我正在從事的活動是通過意向從以前的(父級?)活動中調用的... – Hamid 2010-10-11 15:23:59

1

嘗試

Sounds s = new Sounds(); 
s.initSounds(); 
s.playFlip(); 
s.setSound(true); 
1

所做的類的所有方法是靜態的。如果您想按原樣使用它們,請撥打Sounds.initSound()等。但是,由於您有類變量,靜態方法和變量看起來不合適。從您的成員中刪除staticFLIP_SOUND除外),然後嘗試創建類的實例並調用正常的方法。

2

我也有關於這類特殊用法的問題。我是Android中的新手,甚至在類的使用中,我正在研究WebInterface。

Shane Oliver的解決方案使用標準類變量爲我工作。

在活動類:

Private JavaScriptInterface myJavaScriptInterface; 
myJavaScriptInterface.Toastshow("Hi EveryOne"); 

甚至:

JavaScriptInterface myJavaScriptInterface = new JavaScriptInterface(this); 

至於類JavaScriptInterface:

public class JavaScriptInterface { 

    Context myContext; 

    //Instanciar o interface e definir o conteudo 
    JavaScriptInterface(Context c) { 
     myContext = c; 
    } 


    public void Toastshow(String toast_msg) 
    { 


     Toast.makeText(myContext, toast_msg, Toast.LENGTH_LONG).show(); 
    } 
} 

希望這有助於...