Я пытаюсь создать конвертер азбуки Морзе с функцией воспроизведения преобразованного текста, у меня есть 2 звуковых эффекта для точек Морзе * sh и точки.
После перевода текста на азбуку я сканирую преобразовать текст и проверить, используя инструкцию if, если строка "." запустите dot media player, и если строка "-", запустите da sh media player, da sh media player работает нормально, но проблема в dot media player, он не работает, и я попадаю в logcat
E/MediaPlayerNative: error (1, -2147483648)
хотя этот код точечного медиапроигрывателя точно такой же, как у да sh, что очень запутанно
package com.example.morseapp;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ClipData;
import android.content.Context;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.content.ClipboardManager;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private TextView txt;
private TextView result;
Button toMorseBtn;
Button toAlphaBtn;
Button copyBtn;
Button playBtn;
String convertedTxt;
MediaPlayer dot;
MediaPlayer dash;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txt = (TextView) findViewById(R.id.txt);
result = (TextView) findViewById(R.id.result);
toMorseBtn = (Button) findViewById(R.id.toMorseBtn);
toAlphaBtn = (Button) findViewById(R.id.toAlphaBtn);
copyBtn = (Button) findViewById(R.id.copyBtn);
playBtn = (Button) findViewById(R.id.playBtn);
copyBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("copied", convertedTxt);
clipboard.setPrimaryClip(clip);
Toast.makeText(getApplicationContext(), " translation is copied to clip Board", Toast.LENGTH_SHORT).show();
}
});
toMorseBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String txtToConvert = txt.getText().toString();
convertedTxt = MorseCode.alphaToMorse(txtToConvert);
result.setText(convertedTxt);
}
});
toAlphaBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String txtToConvert = txt.getText().toString();
convertedTxt = MorseCode.morseToAlpha(txtToConvert);
result.setText(convertedTxt);
}
});
}
public void play(View view) {
String[] words = convertedTxt.trim().split(" ");
for (String word : words) {
for (String letter : word.split(" ")) {
for (int i = letter.length() - 1; i >= 0; i--) {
try{
if (letter.substring(i, i + 1).equals(".")) {
try{
if(dot == null){
dot = MediaPlayer.create(getApplicationContext(), R.raw.dot);
dot.start(); Thread.sleep(1000);
}else{
dot = MediaPlayer.create(getApplicationContext(), R.raw.dot);
dot.start();
Thread.sleep(1000);
}
}catch (Exception e){
Toast.makeText(getApplicationContext(), "Interrupted", Toast.LENGTH_SHORT).show();
}}
if(letter.substring(i, i + 1).equals("-")){
try{
if( dash == null){
dash = MediaPlayer.create(getApplicationContext(), R.raw.dash);
dash.start();
Thread.sleep(1000);
}
else{
dash = MediaPlayer.create(getApplicationContext(), R.raw.dash);
dash.start();
Thread.sleep(1000);
}
}catch (Exception e){
Toast.makeText(getApplicationContext(), "Interrupted", Toast.LENGTH_SHORT).show();
}
}
}catch (Exception e){
e.printStackTrace();
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Toast.makeText(getApplicationContext(), "Word Interrupted", Toast.LENGTH_SHORT).show();
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Toast.makeText(getApplicationContext(), "Word Interrupted", Toast.LENGTH_SHORT).show();
}
}
}
}
logcat выглядит так
2020-03-16 12: 33: 10.378 19250-19263 / com.example.morseapp E / MediaPlayerNative: ошибка (1, -2147483648)