2016-04-17 11 views
0

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

Antwort

0

Für mich ist es wie nachrichts aussieht wird mit null anstelle eines tatsächlichen Zeichenfolge genannt. Beachten Sie, dass intent.getStringExtra (some_string) null zurückgeben kann, wenn some_string nicht gefunden werden kann.

Verwandte Themen