2012-07-04 3 views
1

Я пытаюсь получить уведомление gcm в своем мобильном телефоне Android. Все работает отлично, мое устройство Android получает регистрацию с сервера gcm, я отправляю его на свой PHP-сервер, за исключением его. Я запускаю свой PHP-скрипт с этим идентификатором registrationID для отправки уведомлений на моем мобильном устройстве Android. Уведомление не отображается, и на моем устройстве отображается исключение во время выполнения (это исключение не появляется, когда я запускаю его на эмуляторе). в моем классе IntentService, который я не могу понять из своего logcat.Не удалось получить уведомление gcm на мобильном устройстве: Android

Вот мой IntentService Класс:

package com.pack.gcm; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 

import android.app.IntentService; 
import android.content.Context; 
import android.content.Intent; 
import android.os.PowerManager; 
import android.util.Log; 

import android.widget.Toast; 

public class MyIntentService extends IntentService { 

public MyIntentService() { 
    super("MuazzamService"); 
} 

private static PowerManager.WakeLock sWakeLock; 
    private static final Object LOCK = MyIntentService.class; 



@Override 
protected void onHandleIntent(Intent intent) { 

    try { 
      String action = intent.getAction(); 
      if (action.equals("com.google.android.c2dm.intent.REGISTRATION")) { 
       handleRegistration(intent); 
      } else if (action.equals("com.google.android.c2dm.intent.RECEIVE")) { 
       handleMessage(intent); 
      } 
     } finally { 
      synchronized(LOCK) { 
       sWakeLock.release(); 
      } 
     } 
} 

private void handleRegistration(Intent intent) { 
     try { 
     String registrationId = intent.getStringExtra("registration_id"); 
     String error = intent.getStringExtra("error"); 
     String unregistered = intent.getStringExtra("unregistered");  
     // registration succeeded 
     if (registrationId != null) { 

      this.SendRegistrationIDViaHttp(registrationId); 
      Log.i("Regid",registrationId); 
     } 

     if (unregistered != null) { 
     } 

     if (error != null) { 
      if ("SERVICE_NOT_AVAILABLE".equals(error)) { 
       Log.e("ServiceNoAvail",error); 

      } 
      else { 
       Log.i("Error In Recieveing regid", "Received error: " + error); 
      } 
     } 
     }catch(Exception e) 
     { 
      Log.e("ErrorHai(MIS0)",e.toString()); 
      e.printStackTrace(); 
     } 
} 

private void SendRegistrationIDViaHttp(String regID) { 

    HttpClient httpclient = new DefaultHttpClient(); 
try 
{ 
    Context context = getApplicationContext(); 

    HttpGet httpget = new 
      HttpGet("http://192.168.1.12/php/GCM/AndroidRequest.php?registrationID="+regID+"&[email protected]"); //test purposes k liye muazzam 
    HttpResponse response = httpclient.execute(httpget); 
    HttpEntity entity=response.getEntity(); 
    if(entity!=null) 
    { 
      InputStream inputStream=entity.getContent(); 
      String result= convertStreamToString(inputStream); 
      Log.i("finalAnswer",result); 
      Toast tst=Toast.makeText(context,regID, Toast.LENGTH_SHORT); 
      tst.show(); 
    } 
} 
catch (ClientProtocolException e) 
{ 
    Log.e("errorhai",e.getMessage()); 
    e.printStackTrace(); 
} 
catch (IOException e) 
{ 
    Log.e("errorhai",e.getMessage()); 
    e.printStackTrace(); 
} 
} 
    private static String convertStreamToString(InputStream is) { 

    BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
    StringBuilder sb = new StringBuilder(); 

    String line = null; 
    try { 
     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
    } catch (IOException e) { 
     Log.e("ErrorHai(MIS)",e.toString()); 
     e.printStackTrace(); 
    } finally { 
     try { 
      is.close(); 
     } catch (IOException e) { 
      Log.e("ErrorHai(MIS2)",e.toString()); 
      e.printStackTrace(); 
     } 
    } 
    return sb.toString(); 
} 

private void handleMessage(Intent intent) { 
    String score = intent.getStringExtra("score"); 
    String time = intent.getStringExtra("time"); 

    Log.i("GetExtraScore",score); 
    Log.i("GetExtratime",time); 
} 

static void runIntentInService(Context context,Intent intent){ 
    synchronized(LOCK) { 

     if (sWakeLock == null) { 
       PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
       sWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "my_wakelock"); 
      } 
     } 
     sWakeLock.acquire(); 
     intent.setClassName(context, MyIntentService.class.getName()); 
     context.startService(intent); 
} 

} 

Вот мой Logcat:

07-04 23:00:41.979: E/AndroidRuntime(9987): FATAL EXCEPTION: IntentService[MuazzamService] 
07-04 23:00:41.979: E/AndroidRuntime(9987): java.lang.NullPointerException: println needs a message 
07-04 23:00:41.979: E/AndroidRuntime(9987): at android.util.Log.println_native(Native Method) 
07-04 23:00:41.979: E/AndroidRuntime(9987): at android.util.Log.i(Log.java:158) 
07-04 23:00:41.979: E/AndroidRuntime(9987): at com.pack.gcm.MyIntentService.handleMessage(MyIntentService.java:139) 
07-04 23:00:41.979: E/AndroidRuntime(9987): at com.pack.gcm.MyIntentService.onHandleIntent(MyIntentService.java:41) 
07-04 23:00:41.979: E/AndroidRuntime(9987): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:59) 
07-04 23:00:41.979: E/AndroidRuntime(9987): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-04 23:00:41.979: E/AndroidRuntime(9987): at android.os.Looper.loop(Looper.java:123) 
07-04 23:00:41.979: E/AndroidRuntime(9987): at android.os.HandlerThread.run(HandlerThread.java:60) 
07-04 23:01:48.089: E/AndroidRuntime(10099): FATAL EXCEPTION: IntentService[MuazzamService] 
07-04 23:01:48.089: E/AndroidRuntime(10099): java.lang.NullPointerException: println needs a message 
07-04 23:01:48.089: E/AndroidRuntime(10099): at android.util.Log.println_native(Native Method) 
07-04 23:01:48.089: E/AndroidRuntime(10099): at android.util.Log.i(Log.java:158) 
07-04 23:01:48.089: E/AndroidRuntime(10099): at com.pack.gcm.MyIntentService.handleMessage(MyIntentService.java:139)  
07-04 23:01:48.089: E/AndroidRuntime(10099): at com.pack.gcm.MyIntentService.onHandleIntent(MyIntentService.java:41) 
07-04 23:01:48.089: E/AndroidRuntime(10099): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:59) 
07-04 23:01:48.089: E/AndroidRuntime(10099): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-04 23:01:48.089: E/AndroidRuntime(10099): at android.os.Looper.loop(Looper.java:123) 
07-04 23:01:48.089: E/AndroidRuntime(10099): at android.os.HandlerThread.run(HandlerThread.java:60) 
07-04 23:11:36.189: E/AndroidRuntime(10310): FATAL EXCEPTION: IntentService[MuazzamService] 
07-04 23:11:36.189: E/AndroidRuntime(10310): java.lang.NullPointerException: println needs a message 
07-04 23:11:36.189: E/AndroidRuntime(10310): at android.util.Log.println_native(Native Method) 
07-04 23:11:36.189: E/AndroidRuntime(10310): at android.util.Log.i(Log.java:158) 
07-04 23:11:36.189: E/AndroidRuntime(10310): at com.pack.gcm.MyIntentService.handleMessage(MyIntentService.java:139) 
07-04 23:11:36.189: E/AndroidRuntime(10310): at com.pack.gcm.MyIntentService.onHandleIntent(MyIntentService.java:41) 
07-04 23:11:36.189: E/AndroidRuntime(10310): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:59) 
07-04 23:11:36.189: E/AndroidRuntime(10310): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-04 23:11:36.189: E/AndroidRuntime(10310): at android.os.Looper.loop(Looper.java:123) 
07-04 23:11:36.189: E/AndroidRuntime(10310): at android.os.HandlerThread.run(HandlerThread.java:60) 
07-04 23:12:31.739: E/AndroidRuntime(10482): FATAL EXCEPTION: IntentService[MuazzamService] 
07-04 23:12:31.739: E/AndroidRuntime(10482): java.lang.NullPointerException: println needs a message 
07-04 23:12:31.739: E/AndroidRuntime(10482): at android.util.Log.println_native(Native Method) 
07-04 23:12:31.739: E/AndroidRuntime(10482): at android.util.Log.i(Log.java:158) 
07-04 23:12:31.739: E/AndroidRuntime(10482): at com.pack.gcm.MyIntentService.handleMessage(MyIntentService.java:139) 
07-04 23:12:31.739: E/AndroidRuntime(10482): at com.pack.gcm.MyIntentService.onHandleIntent(MyIntentService.java:41) 
07-04 23:12:31.739: E/AndroidRuntime(10482): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:59) 
07-04 23:12:31.739: E/AndroidRuntime(10482): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-04 23:12:31.739: E/AndroidRuntime(10482): at android.os.Looper.loop(Looper.java:123) 
07-04 23:12:31.739: E/AndroidRuntime(10482): at android.os.HandlerThread.run(HandlerThread.java:60) 
07-04 23:13:57.199: E/AndroidRuntime(10541): FATAL EXCEPTION: IntentService[MuazzamService] 
07-04 23:13:57.199: E/AndroidRuntime(10541): java.lang.NullPointerException: println needs a message 
07-04 23:13:57.199: E/AndroidRuntime(10541): at android.util.Log.println_native(Native Method) 
07-04 23:13:57.199: E/AndroidRuntime(10541): at android.util.Log.i(Log.java:158) 
07-04 23:13:57.199: E/AndroidRuntime(10541): at com.pack.gcm.MyIntentService.handleMessage(MyIntentService.java:139) 
07-04 23:13:57.199: E/AndroidRuntime(10541): at com.pack.gcm.MyIntentService.onHandleIntent(MyIntentService.java:41) 
07-04 23:13:57.199: E/AndroidRuntime(10541): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:59) 
07-04 23:13:57.199: E/AndroidRuntime(10541): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-04 23:13:57.199: E/AndroidRuntime(10541): at android.os.Looper.loop(Looper.java:123) 
07-04 23:13:57.199: E/AndroidRuntime(10541): at android.os.HandlerThread.run(HandlerThread.java:60) 

Update:

Это то, что я посылаю от моего PHP скрипт:

$message = '{"data":{"message":"one","some":"free"},"registration_ids":["xxxx"]}'; 

, и это то, что я получаю в результате.

{"multicast_id":8230995787169744326,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1341431581592147%5d17b789f9fd7ecd"}]}8.2309957871697E+18 

ответ

0

Является ли это полезной нагрузкой JSON, которую вы нажимаете на свое устройство?

{ "data": 
    { 
    "score": "5x1", 
    "time": "15:10" 
    }, 
    "registration_ids": [xxxxxx] 
} 

Приведенная выше полезная нагрузка необходима для работы вашего клиентского кода.

Поставьте Null проверку указателя после этих вызовов:

String score = intent.getStringExtra("score"); 
String time = intent.getStringExtra("time"); 

Скорее всего оценка и время являются нуль, и в результате чего Log.i врезаться

+0

да вы правы это дает 'nullpointerexception' я поймал исключение nullpointer и попытался напечатать его в 'Log.e', но он ничего не печатает в журнале. – Mj1992

+0

oh thnx я получил его, я отправлял сообщение оттуда и получал счет и время здесь, я плохо. – Mj1992

+0

@ Mj1992 не могли бы вы объяснить, что вы сделали дополнительно, чтобы решить вашу проблему? Becoz, я также не получаю уведомление gcm на моем телефоне, хотя ответ gcm с статусом 200 на мой сервер – user1170793

Смежные вопросы