Während des onCreate()-Aufruf habe ich einen Listener für Textänderungen an ein EditText-Steuerelement namens Sugar angehängt, sodass, wenn sich der Text in diesem Steuerelement ändert, die Funktion onTextChanged() aufgerufen wird.
Im Inneren onTextChanged()-Funktion habe ich 4 verschiedene Szenarien (wobei der Blutzucker einer Person entweder niedrig und fallend, niedrig und steigend, hoch und fallend oder hoch und steigend sein kann). Abhängig davon, welche Zahl (von 1 bis 4) sich in der Zuckerbox befindet, besteht mein Ziel darin, einen String an eine Funktion namens M4APlayer.play() in M4APlayer.java zu übergeben und zu bestimmen, welcher Sound abgespielt werden soll (je nachdem, was). Eine Zahl von 1 bis 4 wird in das Zuckerfeld eingegeben.
Alles hat gut funktioniert, bis ich die Funktion MediaPlayer.create() hinzugefügt habe. Meine App stürzt jetzt mit der Fehlermeldung ab:
Das gewünschte Swap-Verhalten konnte nicht erreicht werden
Was könnte das bedeuten? Hier ist mein MainActivity.java-Code:
Code: Select all
package com.UnitedToolsForSouls.SoundAlert;
import android.app.*;
import android.os.*;
import java.util.*;
import android.widget.*;
import android.text.*;
import android.content.*;
public class MainActivity extends Activity {
private static EditText sugar;
private static TextView result;
private static TextView scenario1;
private static TextView scenario2;
private static TextView scenario3;
private static TextView scenario4;
public Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
context = this;
sugar = (EditText) findViewById(R.id.sugar);
result = (TextView) findViewById(R.id.result);
scenario1 = (EditText) findViewById(R.id.scenario1);
scenario2 = (EditText) findViewById(R.id.scenario2);
scenario3 = (EditText) findViewById(R.id.scenario3);
scenario4 = (EditText) findViewById(R.id.scenario4);
sugar.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// Called as text is being changed
String sug = sugar.getText().toString();
String s1 = scenario1.getText().toString();
String s2 = scenario2.getText().toString();
String s3 = scenario3.getText().toString();
String s4 = scenario4.getText().toString();
result.setText("???");
if (sug.length() == 1) {
if (sug.charAt(0) == '1') {
result.setText(s1);
}
if (sug.charAt(0) == '2') {
result.setText(s2);
}
if (sug.charAt(0) == '3') {
result.setText(s3);
}
if (sug.charAt(0) == '4') {
result.setText(s4);
}
M4APlayer.play(context, result.getText().toString());
}
}
@Override
public void beforeTextChanged(CharSequence p1, int p2, int p3, int p4) {
// TODO: Implement this method
}
@Override
public void afterTextChanged(Editable p1) {
// TODO: Implement this method
}
});
}
}
< /code>
Hier ist mein Code für M4APLayer: < /p>
package com.UnitedToolsForSouls.SoundAlert;
import android.content.Context;
import android.media.MediaPlayer;
public class M4APlayer {
public static void play(Context context, String file) {
/*PROBLEM*/
MediaPlayer mp = MediaPlayer.create(context, R.id.scenario1);
//mp.start();
//Stop the fplayer.
//Loop and play the file when nothing is playing.
}
}
Ich habe versucht, den Code in M4APlayer.play() auszukommentieren, bis meine App nicht mehr abstürzte, und stellte fest, dass es MediaPlayer.create() war, der dies verursachte. Auf dieses Szenario gibt es noch keine konkrete Antwort. Eine Antwort schlug vor, den Cache zu leeren und mein Telefon neu zu starten, aber das Auskommentieren dieser einen Zeile hat geholfen.