Importing my custom class and calling it's met

2020-06-21 06:12发布

问题:

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?

回答1:

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


回答2:

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...



回答3:

Try

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


回答4:

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.