2016-10-16 1 views
1

Ich arbeite an einer App, die im Grunde eine Musikbibliothek ist und für jeden Song, wenn Sie Taste play drücken, beginnt der Song zu spielen. Im Moment hat meine Bibliothek 3 Elemente und ich versuche, "sound.mp3" zu spielen, was für die 3 von ihnen (im Moment) in res/roh ist.Fehler mit mediaPlayer.create (dies, R.raw.sound) wenn nicht in onCreate

Mein Problem ist, wenn ich versuche, den Clip zu referenzieren, habe ich eine rote Unterstreichung unter "this, R.raw.sound". Ich habe gesehen, dass in den meisten Fällen "create" in onCreate aufgerufen wird, aber in meinem Fall ist diese Klasse in keiner Aktivität, also kann ich das nicht tun ...

Können Sie mir dabei helfen? :)

public class ClipsAdapter extends RecyclerView.Adapter<ClipsAdapter.MyViewHolder> { 

private final List<Clips> clip2 = Arrays.asList(
     new Clips("Clip 1", "Artist 1"), 
     new Clips("Clip 2", "Artist 2"), 
     new Clips("Clip 3", "Artist 3") 
); 

public class MyViewHolder extends RecyclerView.ViewHolder { 

    private final TextView title; 
    private final TextView author; 
    private final ImageView play; 

    private Clips currentClip; 
    MediaPlayer mediaPlayer = new MediaPlayer(); 

    public MyViewHolder(final View itemView) { 
     super(itemView); 

     title = ((TextView) itemView.findViewById(R.id.title)); 
     author = ((TextView) itemView.findViewById(R.id.author)); 
     play = ((ImageView) itemView.findViewById(R.id.play)); 
    } 

    public void display(RandomClips RandomClip) { 
     currentRandomClip = RandomClip; 
     title.setText(RandomClip.title); 
     author.setText(RandomClip.author); 
     play.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Log.d(TAG, "Play clip: " + currentClip.title); 
       mediaPlayer.create(this, R.raw.sound); 

       if (mediaPlayer.isPlaying()) 
       { 
        mediaPlayer.stop(); 
        mediaPlayer.reset(); 
        Log.d(TAG, currentRandomClip.title + " has stopped"); 
       } 
       else 
       { 
        mediaPlayer.start(); 
        Log.d(TAG, currentRandomClip.title + " is playing"); 
       } 
      } 
     }); 
    } 
} 

}

Antwort

0

mediaPlayer.create() -Anforderungen für einen Kontext und die Datei zu spielen. Das "Dies", das Sie als Argument übergeben, ist kein Kontext (Sie befinden sich in einer anonymen Klasse) und daher erhalten Sie einen Fehler.
Sie sollten einen Kontext übergeben. Übergeben Sie einfach den Kontext Ihrer Aktivität, wenn Sie Ihren ClipsAdapter instanziieren.

So in Ihrer Tätigkeit instanziiert Ihren Adapter:

clipsAdapter = new ClipsAdapter(this); 

In Ihrer ClipsAdapter Klasse, erstellen Sie einen Konstruktor mit einem Parameter:

public ClipsAdapter(YourActivity activity) { 
    this.activity = activity; 
} 

Endlich:

mediaPlayer.create(activity, R.raw.sound); 
+0

Hallo Anto! Danke für Ihre Hilfe, ich konnte mein Programm ohne Fehler spielen :) Wenn ich das gut verstehe, verwenden wir einen Konstruktor, um die aktuelle Aktivität als die Aktivität festzulegen, in der der Soundclip abgespielt wird. Und das ist notwendig, weil wir eine Aktivität brauchen, um den Clip zu starten. – Yoan

+0

Ich denke, es funktioniert jetzt, obwohl ich denke, dass wir mit einem Emulator nicht wirklich Sound spielen können ... Habe ich recht? – Yoan

+0

Gut zu hören. Sie sollten in der Lage sein, Sound mit Emulator zu spielen. Dann ist das eine andere Frage. Überprüfen Sie, ob dies http://stackoverflow.com/questions/5259849/mediaplayer-no-long-working-on-the-emulator-since-r10/8262747#8262747 hilft – HelloSadness

Verwandte Themen