2014-11-25 2 views
0

Я пытаюсь внедрить оповещения обозревателя parse.com в моем приложении iOS и Android. Ive успешно удалось реализовать это на iOS, однако я все еще борюсь с реализацией Android. Когда уведомление получено пользователем, и пользователь нажимает уведомление, я хочу открыть свою активность «HomeScreen» и отобразить текст из уведомления в диалоговом окне оповещения. обработчик получателя и файлы манифеста показаны ниже вместе с LogCat. Что я делаю неправильно, и как я его исправить?Ошибка, связанная с получением оповещения обозревателя parse.com Android

HomeScreen Java:

public class Receiver extends ParsePushBroadcastReceiver { 

    public Receiver(){ 

    } 
    private static final String TAG = "MyNotificationsReceiver"; 

    @Override 
    public void onPushOpen(Context context, Intent intent) { 
     Log.e("Push", "Clicked"); 
     Intent i = new Intent(context, HomeScreen.class); 
     i.putExtras(intent.getExtras()); 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i); 
      try { 
       JSONObject json = new JSONObject(intent.getExtras().getString("com.parse.Data")); 

       String notificationText = json.getString("alert"); 
       AlertDialog Alert= new AlertDialog.Builder(context) 
         .setTitle("News") 
         .setMessage(notificationText) 
         .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener(){ 
          public void onClick(DialogInterface dialog, int which){ 
          } 
         }) 
         .show(); 

      } catch (JSONException e) { 
       Log.d(TAG, "JSONException: " + e.getMessage()); 

     } 
    } 

} 

Manifest:

<service android:name="com.parse.PushService" /> 
     <receiver android:name="com.parse.ParseBroadcastReceiver"> 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
       <action android:name="android.intent.action.USER_PRESENT" /> 
      </intent-filter> 
     </receiver> 
     <receiver android:name="com.parse.GcmBroadcastReceiver" 
      android:permission="com.google.android.c2dm.permission.SEND"> 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

       <!-- 
        IMPORTANT: Change "com.parse.tutorials.pushnotifications" to match your app's package name. 
       --> 
       <category android:name="au.gov.nsw.shellharbour.saferroadsshellharbour" /> 
      </intent-filter> 
     </receiver> 
     <receiver android:name="au.gov.nsw.shellharbour.saferroadsshellharbour.HomeScreen$Receiver" android:exported="false"> 
      <intent-filter> 
       <action android:name="com.parse.push.intent.RECEIVE" /> 
       <action android:name="com.parse.push.intent.DELETE" /> 
       <action android:name="com.parse.push.intent.OPEN" /> 
      </intent-filter> 
     </receiver> 

Logcat:

java.lang.RuntimeException: Unable to instantiate receiver au.gov.nsw.shellharbour.saferroadsshellharbour.HomeScreen$Receiver: java.lang.InstantiationException: can't instantiate class au.gov.nsw.shellharbour.saferroadsshellharbour.HomeScreen$Receiver; no empty constructor 
      at android.app.ActivityThread.handleReceiver(ActivityThread.java:2265) 
      at android.app.ActivityThread.access$1600(ActivityThread.java:143) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:4963) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.InstantiationException: can't instantiate class au.gov.nsw.shellharbour.saferroadsshellharbour.HomeScreen$Receiver; no empty constructor 
      at java.lang.Class.newInstanceImpl(Native Method) 
      at java.lang.Class.newInstance(Class.java:1319) 
      at android.app.ActivityThread.handleReceiver(ActivityThread.java:2260) 
            at android.app.ActivityThread.access$1600(ActivityThread.java:143) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:4963) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
            at dalvik.system.NativeStart.main(Native Method) 

ответ

1

EDIT: Поскольку приемник внутренний класс, он не может существовать вне экземпляра его внешнего класса. Вот почему вы не можете создать его через определение манифеста. Чтобы решить, отметьте Receiver как static или определите его как свой собственный файл класса. (Вероятно, вы можете удалить пустой конструктор, о котором я ранее советовал).


java.lang.InstantiationException: не может создать экземпляр класса au.gov.nsw.shellharbour.saferroadsshellharbour.HomeScreen $ Receiver; не пустой конструктор на android.app.ActivityThread.handleReceiver (ActivityThread.java:2265)

Вам нужен конструктор, так что приемник может быть создан:

public Receiver(){ 

} 
+0

где бы я должен реализовать это? – scb998

+0

Внутри вашего класса приемника. См. Здесь: https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html –

+0

Ive внедрил его, как было предложено (см. Отредактированный вопрос), и все равно возникает одна и та же ошибка. – scb998

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