Ich versuche, ein Callback-Listener in meinem GcmListenerService zu implementieren. Ich muss eine Chat-Unterhaltung aktualisieren, sobald eine neue Nachricht eintrifft.Callback-Listener in Android Service funktioniert nicht - FATALE AUSNAHME: AsyncTask # 1
ich gehen Sie wie gewohnt den Hörer in der Host-Aktivität einrichten und den Service, aber ich bekomme die folgende Fehlermeldung, wenn das meine Rückruf Zuhörer zeigt Ergebnisse beginnt:
FATAL EXCEPTION: AsyncTask #1 java.lang.NullPointerException
at com.cerculdivelor.gcm.MyGcmListenerService.onMessageReceived(MyGcmListenerService.java:69)
at com.google.android.gms.gcm.GcmListenerService.zzq(Unknown Source)
at com.google.android.gms.gcm.GcmListenerService.zzp(Unknown Source)
at com.google.android.gms.gcm.GcmListenerService.zzo(Unknown Source)
at com.google.android.gms.gcm.GcmListenerService.zza(Unknown Source)
at com.google.android.gms.gcm.GcmListenerService$1.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:841)
Was könnte falsch sein, ist Vielleicht ein schlechter Ansatz Callbacks in einem Service zu verwenden?
Jede Hilfe wird geschätzt. Vielen Dank im Voraus.
GcmListenerService:
public class MyGcmListenerService extends GcmListenerService {
private static final String TAG = "MyGcmListenerService";
private SQLiteDataSource datasource;
newMessageListener mListener;
/**
* Called when message is received.
*
* @param from SenderID of the sender.
* @param data Data bundle containing message data as key/value pairs.
* For Set of keys use data.keySet().
*/
// [START receive_message]
@Override
public void onMessageReceived(String from, Bundle data) {
if (data.getString("notiftype") != null && data.getString("notiftype").equals("message")) {
datasource = new SQLiteDataSource(this);
datasource.open();
MessagesSetter message = new MessagesSetter();
message.setConversationId(data.getString("conversationId"));
message.setSenderfbid(data.getString("senderfbid"));
message.setSendername(data.getString("sendername"));
message.setProdname(data.getString("prodname"));
message.setMessage(data.getString("message"));
message.setTime(data.getString("timestamp"));
message.setAction(data.getString("action"));
Log.i("TAG", data.getString("message"));
datasource.addMessage(message);
showMessageNotification(data);
//refresh the conversation in ConversationActivity
mListener.newMessageArieved();
}
...
// Interface to send selected image's position for deletion
public void setNewMessageListener(newMessageListener mListener) {
this.mListener = mListener;
}
public static interface newMessageListener {
public void newMessageArieved();
}
}
Host-Aktivität:
public class ConversationActivity extends AppCompatActivity implements MyGcmListenerService.newMessageListener {
private ListView listview;
private SQLiteDataSource datasource;
private Bundle extras;
private String myFbId;
private String senderFbId;
private String conversationId;
private EditText replyText;
private ImageView sendReplyBtn;
private HttpConActivity http;
private ArrayList<MessagesSetter> conversation;
private String myName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.conversation_layout);
Toolbar toolbar = (Toolbar) findViewById(R.id.messageToolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
SharedPreferences preferences = getSharedPreferences("user",
MODE_PRIVATE);
myFbId = preferences.getString("fbId", "");
myName = preferences.getString("name", "");
extras = getIntent().getExtras();
if (extras != null) {
conversationId = extras.getString("conversationId");
}
//set up the listener for new message arievals
MyGcmListenerService serv = new MyGcmListenerService();
serv.setNewMessageListener(this);
...
@Override
public void newMessageArieved() {
conversation = datasource.getConversation(conversationId);
ConversationListViewAdapter messAdapt = new ConversationListViewAdapter(this,
R.layout.conversation_row_layout, conversation);
listview.setAdapter(messAdapt);
Log.i("TAG", "NEW MESSAGE!");
}
Vielleicht irre ich mich, aber ich denke, dass Sie OnBind-Methode anstelle von Listener Callback verwenden müssen, siehe hier http://www.vogella.com/tutorials/AndroidServices/article.html –