Importing my custom class and calling it's met

2020-06-21 05:50发布

I have created a custom class for my Android project called "Sounds" I want to be able to call it from my activity. The contents of my class are as follows:

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;
}
}

In my main Activity class I have tried importing the class, creating an instance of it but I guess I'm just not understanding how it's done. Can anybody point me in the right direction please?

4条回答
Fickle 薄情
2楼-- · 2020-06-21 06:27

Try

Sounds s = new Sounds();
s.initSounds();
s.playFlip();
s.setSound(true);
查看更多
贪生不怕死
3楼-- · 2020-06-21 06:34

I've got also issues on this peculiar usage of classes. I'm a newbie in Android and even in the usage of classes and i am studing the WebInterface.

The Shane Oliver's solution worked for me using the standard class variables.

In the Activity class :

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

or even :

JavaScriptInterface myJavaScriptInterface = new JavaScriptInterface(this);

As for the class 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();
    }
}

Hope this helps...

查看更多
冷血范
4楼-- · 2020-06-21 06:38

Edited: From your Activity class:

private Sounds s;

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

You might also send the context with the constructor to your custom class.

Remove the static variables and methods:

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;
}
}
查看更多
疯言疯语
5楼-- · 2020-06-21 06:43

You have made all the methods of the class static. If you want to use them as-is, call them with Sounds.initSound() and so on. However, since you have class variables, static methods and variables don't look appropriate. Remove static from your members (except from FLIP_SOUND) and then try creating an instance of the class and calling methods like normal.

查看更多
登录 后发表回答