Как передать необработанный mp3 из предмета переработчика в другой вид деятельности - PullRequest
1 голос
/ 28 марта 2020

В моем приложении Android у меня есть просмотрщик, который содержит список предметов. В задании повторного просмотра у каждого элемента есть одно текстовое представление, а у другого - два вида текста и одна кнопка воспроизведения звука. Но аудио не играет. Как я могу установить setOnClickListener и воспроизводить аудио mp3, используя MediaPlayer. Вот мой код:

NameModel. java


public class NameModel {

    private String name,meaning;
    private int audio;

    public NameModel(String name, String meaning, int audio) {

        this.name= name;
        this.meaning= meaning;
        this.audio= audio;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name= name;
    }

    public String getMeaning() {
        return meaning;
    }

    public void setMeaning(String meaning) {
        this.meaning= meaning;
    }

    public int getAudio() {
        return audio;
    }

    public void setAudio(int audio) {
        this.audio = audio;
    }
}

NameAdapter. java


itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int position=getAdapterPosition();
                    NameModel nameModel=nameItemList.get(position);

                    Intent intent=new Intent(context, NameDetailsActivity.class);
                    intent.putExtra("NAME",nameModel.getName());
                    intent.putExtra("MEANING",nameModel.getMeaning());
                    intent.putExtra("AUDIO", nameModel.getAudio());
                    context.startActivity(intent);
                }
            });

MainActivity. java


public class MainActivity extends AppCompatActivity {

    private LinearLayoutManager linearLayoutManager;
    private List<NameModel> nameModelList;
    private NameAdapter nameAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RecyclerView recyclerView  = (RecyclerView) findViewById(R.id.recyclerViewId);
        nameModelList = new ArrayList<>();
        nameAdapter = new NameAdapter(this,nameModelList);

        linearLayoutManager = new LinearLayoutManager(this);
        recyclerView.setAdapter(nameAdapter);
        recyclerView.setLayoutManager(linearLayoutManager);

        RecyclerView.ItemDecoration itemDecoration=new DividerItemDecoration(getApplicationContext(),DividerItemDecoration.VERTICAL);
        recyclerView.addItemDecoration(itemDecoration);

        nameModelList.add(new NameModel("Mahmud", "The praised one", R.raw.mahmud));
        nameModelList.add(new NameModel("Maaz", "Brave Man", R.raw.maaz));
    }
}

NameDetailsActivity. java


public class NameDetailsActivity extends AppCompatActivity {

    Context context;
    NameModel nameModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_details_name);

        String name = getIntent().getStringExtra("NAME");
        String meaning = getIntent().getStringExtra("MEANING");
        int audio = getIntent().getIntExtra("AUDIO",0);

        TextView nameText = (TextView) findViewById(R.id.tvName);
        TextView meaningText = (TextView) findViewById(R.id.tvMeaning);
        Button playbutton = (Button) findViewById(R.id.playBtn);

        nameText.setText(name);
        meaningText.setText(meaning);

        playbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MediaPlayer mediaPlayer = MediaPlayer.create(context,audio);
                mediaPlayer.start();
            }

        });
    }
}

любая помощь будет оценена. Спасибо!

1 Ответ

1 голос
/ 28 марта 2020

Прежде всего вы делаете getIntent().getStringExtra("AUDIO");, что в данном случае неправильно. Вы устанавливаете значение int в вашем intent.putExtra("AUDIO", nameModel.getAudio());, поэтому вам нужно вернуть значение int, используя int audio = getIntent().getIntExtra("AUDIO");. Надеюсь, это поможет вам.

Также я заметил одну вещь. В вашей NameDetailsActivity где вы инициализируете свой контекст и свой класс NameModel? На самом деле я не знаю, зачем вам нужен NameModel класс в NameDetailsActivity, но в любом случае ... Если вы передадите этот контекст медиаплееру без инициализации, вы получите nullPointerException. И вы получите исключение, как Caused by java.lang.NullPointerException Attempt to invoke virtual method 'int com.tahmid.name.models.NameModel.getAudioFile()'. Это потому, что ваш NameModel класс в NameDetailsActivity равен нулю.

Вы должны сделать 2 вещи. Если вам нужен NameModel класс в NameDetailsActivity, вы должны создать пустой конструктор в NameModel классе. Вы можете найти это в моем ответе ниже. И вам нужно инициализировать context и nameModel в NameDetailsActivity.

. Попробуйте этот код.

Прежде всего в NameModel создайте пустой конструктор.

public class NameModel {

private String name,meaning;
private int audio;

public NameModel() {}

public NameModel(String name, String meaning, int audio) {

    this.name= name;
    this.meaning= meaning;
    this.audio= audio;
}

// The same code...

И ваши NameDetailsActivity вы можете сделать это.

public class NameDetailsActivity extends AppCompatActivity {

Context context;
NameModel nameModel;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_details_name);

    context = getContext();
    nameModel = new NameModel();

    String name = getIntent().getStringExtra("NAME");
    String meaning = getIntent().getStringExtra("MEANING");
    int audio = getIntent().getIntExtra("AUDIO",0);

    TextView nameText = (TextView) findViewById(R.id.tvName);
    TextView meaningText = (TextView) findViewById(R.id.tvMeaning);
    Button playbutton = (Button) findViewById(R.id.playBtn);

    nameText.setText(name);
    meaningText.setText(meaning);

    playbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            MediaPlayer mediaPlayer = MediaPlayer.create(context,audio);
            mediaPlayer.start();
        }

    });
}
}
...