Autore Topic: Errore unable to instantiate receiver  (Letto 378 volte)

Offline elfo83

  • Utente normale
  • ***
  • Post: 287
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Errore unable to instantiate receiver
« il: 11 Maggio 2014, 18:10:06 CEST »
0
Salve, non so perchè ma continuo ad avere un errore del genere quando il receiver prova a catturare l'intent:

Codice: [Seleziona]
05-11 16:07:11.512: E/AndroidRuntime(3682): FATAL EXCEPTION: main
05-11 16:07:11.512: E/AndroidRuntime(3682): java.lang.RuntimeException: Unable to instantiate receiver com.marco.marco.applicationmarco.MyCustomReceiver: java.lang.ClassNotFoundException: Didn't find class "com.marco.marco.applicationmarco.MyCustomReceiver" on path: /data/app/com.marco.marco.applicationmarco-2.apk
05-11 16:07:11.512: E/AndroidRuntime(3682):         at android.app.ActivityThread.handleReceiver(ActivityThread.java:2357)
05-11 16:07:11.512: E/AndroidRuntime(3682):         at android.app.ActivityThread.access$1500(ActivityThread.java:141)
05-11 16:07:11.512: E/AndroidRuntime(3682):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1310)
05-11 16:07:11.512: E/AndroidRuntime(3682):         at android.os.Handler.dispatchMessage(Handler.java:99)
05-11 16:07:11.512: E/AndroidRuntime(3682):         at android.os.Looper.loop(Looper.java:137)
05-11 16:07:11.512: E/AndroidRuntime(3682):         at android.app.ActivityThread.main(ActivityThread.java:5041)
05-11 16:07:11.512: E/AndroidRuntime(3682):         at java.lang.reflect.Method.invokeNative(Native Method)
05-11 16:07:11.512: E/AndroidRuntime(3682):         at java.lang.reflect.Method.invoke(Method.java:511)
05-11 16:07:11.512: E/AndroidRuntime(3682):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-11 16:07:11.512: E/AndroidRuntime(3682):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-11 16:07:11.512: E/AndroidRuntime(3682):         at dalvik.system.NativeStart.main(Native Method)
05-11 16:07:11.512: E/AndroidRuntime(3682): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.marco.marco.applicationmarco.MyCustomReceiver" on path: /data/app/com.marco.marco.applicationmarco-2.apk
05-11 16:07:11.512: E/AndroidRuntime(3682):         at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65)
05-11 16:07:11.512: E/AndroidRuntime(3682):         at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
05-11 16:07:11.512: E/AndroidRuntime(3682):         at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
05-11 16:07:11.512: E/AndroidRuntime(3682):         at android.app.ActivityThread.handleReceiver(ActivityThread.java:2352)
05-11 16:07:11.512: E/AndroidRuntime(3682):         ... 10 more

Questo è il mio manifest.xml

Codice (XML): [Seleziona]
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.marco.marco.applicationmarco"
   android:versionCode="1"
   android:versionName="1.0" >

    <uses-sdk
       android:minSdkVersion="8" />
   
     <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
 
<!--
 IMPORTANT: Change "com.parse.starter.permission.C2D_MESSAGE" in the lines below
 to match your app's package name + ".permission.C2D_MESSAGE".
-->
<permission android:protectionLevel="signature"
   android:name="com.marco.marco.permission.C2D_MESSAGE" />
<uses-permission android:name="com.marco.marco.permission.C2D_MESSAGE" />
       

    <application
       android:allowBackup="true"
       android:screenOrientation="portrait"
       android:icon="@drawable/ic_launcher"
       android:label="@string/app_name"
       android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
       >
       
        <activity android:name=".Activities.Play"   android:screenOrientation="portrait">
       
        </activity>
       
         <activity android:name=".Activities.Settings"   android:screenOrientation="portrait"/>
       
         <activity android:name=".Activities.Splashscreen"   android:screenOrientation="portrait">
              <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
          </activity>  
         
             <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="MyCustomReceiver" android:enabled="true">
  <intent-filter>
    <action android:name="UPDATE_STATUS" />
  </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.starter" to match your app's package name.
   -->
    <category android:name="com.marco.marco.starter" />
  </intent-filter>
</receiver>
       
    </application>

</manifest>

questo è il receiver all'interno di un'attività:

Codice (Java): [Seleziona]
public class MyCustomReceiver extends BroadcastReceiver {
                private static final String TAG = "MyCustomReceiver";
                 
                  @Override
                  public void onReceive(Context context, Intent intent) {
                   
                          Bundle extras = intent.getExtras();
                        String message = extras != null ? extras.getString("com.parse.Data") : "";
                        JSONObject jObject;
                        Log.d("BROADCASTT","OKKKKK");
                          try {
                                  jObject = new JSONObject(message);
                            Log.d("Log",
                                    jObject.getString("alert")
                                            );
                      }
                     catch (JSONException e) {
                      Log.d(TAG, "JSONException: " + e.getMessage());
                    }
                  }
                }

Sono due ore che ci sto sbattendo la testa, qualcuno ha idee? Grazie

Post unito: 11 Maggio 2014, 18:45:14 CEST
Praticamente, se creo una classe MyCustomReceiver:

Codice (Java): [Seleziona]
public class MyCustomReceiver extends BroadcastReceiver {
                private static final String TAG = "MyCustomReceiver";
                 
                  @Override
                  public void onReceive(Context context, Intent intent) {
                   
                          Bundle extras = intent.getExtras();
                        String message = extras != null ? extras.getString("com.parse.Data") : "";
                        JSONObject jObject;
                        Log.d("BROADCASTT","OKKKKK");
                          try {
                                  jObject = new JSONObject(message);
                            Log.d("Log",
                                    jObject.getString("alert")
                                            );
                      }
                     catch (JSONException e) {
                      Log.d(TAG, "JSONException: " + e.getMessage());
                    }
                  }
                }

e modifico il manifest.xml così:

Codice (XML): [Seleziona]
<receiver android:name=".Activities.MyCustomReceiver" android:enabled="true">
  <intent-filter>
    <action android:name="UPDATE_STATUS" />
  </intent-filter>
</receiver>

Mi funziona. Quello che vorrei fare però è inserire il mio register all'interno di un'activity in modo tale da catturare i dati che voglio con il register e poi mostrarli nella stessa activity. Qualche idea? Grazie
« Ultima modifica: 11 Maggio 2014, 18:45:14 CEST da elfo83, Reason: Merged DoublePost »

Offline Aaaaabbbb

  • Utente junior
  • **
  • Post: 55
  • Respect: +3
    • Google+
    • pietmau
    • Mostra profilo
  • Dispositivo Android:
    Nexus 7, Samsung GT-S5830i, LG Optimus, Galaxy Tab 3
  • Play Store ID:
    aaaaaaaaaaaa
  • Sistema operativo:
    Win, Ubuntu
Re:Errore unable to instantiate receiver
« Risposta #1 il: 11 Maggio 2014, 22:11:03 CEST »
0
Ciao,
beh, non dovrebbe essere un problema:
- nella tua Activity crei una instanza del tuo receiver,
- la registri nell'Activity
- aggiungi l'intent filter all'Activity nel Manifest

Codice (Java): [Seleziona]
MyCustomReceiver  myreceiver = new MyCustomReceiver()
registerReceiver(myreceiver , new IntentFilter(
                                "UPDATE_STATUS"));

Offline elfo83

  • Utente normale
  • ***
  • Post: 287
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:Errore unable to instantiate receiver
« Risposta #2 il: 12 Maggio 2014, 11:17:37 CEST »
0
Ciao Maurizio, se faccio come dici tu non riesco ad accedere ai dati, direttamente nella mia attività, che il MyCustomReceiver "screma" nel suo metodo onReceive dato che si trova in una classe a parte.