Ich bin ziemlich neu in Android, und ich versuche, eine App für ein kleines Projekt von mir zu entwickeln, mit einem Beispiel Bluetooth Chat App und Spotify Medienbenachrichtigungen. Ich konnte die Links nicht zur Verfügung stellen, da der Stack-Überlauf mich nicht ließ, aber sie sind online mit einer schnellen Google-Suche verfügbar. Ich habe mich gefragt, warum ich diese Ausnahme bekomme und gibt es dafür eine Lösung?Android Bluetooth Chat App und Senden von Spotify Song-Namen
java.lang.NullPointerException
Die Zeilennummern zu jedem der Teile des Codes entsprechen unten:
Leitung 269 if (message.length()> 0)
Leitung 56 public class BluetoothChatFragment erstreckt Fragment
Zeile 131 sendMessage (artistName);
Wie mein Code ein:
Ich habe einen statischer Rundfunkempfänger die genau wie der Spotify Link unten. Ich schnappe den Songnamen und Künstler und verpacke sie in Streicher. Dann habe ich einen anderen Rundfunkempfänger in meinem Bluetooth-Fragment. Ich benutzte einen anderen, weil ich nicht wusste, wie ich die Zeichenfolge in das Bluetooth-Fragment bringen konnte, weil ich sendMessage() eine private Methode in der Fragmentklasse aufrufen musste. Es scheint, als würde die Ausnahme werfen, wenn ich sendMessage (string) in meinem Fragment anrufe.
Static Spotify Broadcast-Receiver
package com.example.android.bluetoothchat;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import com.example.android.common.logger.Log;
public class MyBroadcastReceiver extends BroadcastReceiver {
static final class BroadcastTypes {
static final String SPOTIFY_PACKAGE = "com.spotify.music";
static final String PLAYBACK_STATE_CHANGED = SPOTIFY_PACKAGE + ".playbackstatechanged";
static final String QUEUE_CHANGED = SPOTIFY_PACKAGE + ".queuechanged";
static final String METADATA_CHANGED = SPOTIFY_PACKAGE + ".metadatachanged";
}
@Override
public void onReceive(Context context, Intent intent) {
// This is sent with all broadcasts, regardless of type. The value is taken from
// System.currentTimeMillis(), which you can compare to in order to determine how
// old the event is.
long timeSentInMs = intent.getLongExtra("timeSent", 0L);
Intent sendBack = new Intent("Received");
String action = intent.getAction();
String artistName;
String trackName;
if (action.equals(BroadcastTypes.METADATA_CHANGED)) {
artistName = intent.getStringExtra("artist");
trackName = intent.getStringExtra("track");
String msg = "S a " + artistName + '\0';
String msg2 = "S n " + trackName + '\0';
Log.d("Song", msg);
Log.d("Artist", msg2);
sendBack.putExtra("Song", msg);
sendBack.putExtra("Artist", msg2);
} else if (action.equals(BroadcastTypes.PLAYBACK_STATE_CHANGED)) {
boolean playing = intent.getBooleanExtra("playing", false);
// Do something with extracted information
if(playing) {
Log.d("Playing", "S p\0");
sendBack.putExtra("Playing", "S p\0");
}
else {
Log.d("Playing", "S s\0");
sendBack.putExtra("Playing", "S s\0");
}
}
context.sendBroadcast(sendBack);
}
}
Broadcast-Receiver in Fragment:
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String artistName = intent.getStringExtra("Song");
String trackName = intent.getStringExtra("Artist");
String playing = intent.getStringExtra("Playing");
Log.d("Please", artistName);
Log.d("Please", trackName);
Log.d("Please", playing);
sendMessage(artistName);
sendMessage(trackName);
sendMessage(playing);
}
};
nachrichts-Methode():
private void sendMessage(String message) {
// Check that we're actually connected before trying anything
if (mChatService.getState() != BluetoothChatService.STATE_CONNECTED) {
Toast.makeText(getActivity(), R.string.not_connected, Toast.LENGTH_SHORT).show();
return;
}
// Check that there's actually something to send
if (message.length() > 0) {
// Get the message bytes and tell the BluetoothChatService to write
byte[] send = message.getBytes();
mChatService.write(send);
// Reset out string buffer to zero and clear the edit text field
mOutStringBuffer.setLength(0);
mOutEditText.setText(mOutStringBuffer);
}
}
Jede Hilfe wäre sehr geschätzt!
http://developer.android.com/samples/BluetoothChat/index.html