2012-06-06 3 views
2

Je dois passer une longue (_id) avec l'intention de l'activité A à l'activité B, en utilisant ce code:Passe longue avec une intention, toujours obtenir erreur

Intent vip0= new Intent(this, PageSinglePlayerGuess.class); 
vip0.putExtra("resid", (long) 1); 
startActivity(vip0); 

et de le faire dans l'activité B cette méthode (appelée dans onCreate()):

public long getResId() { 
    Intent i= getIntent(); 
    resid= i.getLongExtra("resid", 1); 
    Log.d("D", "Risorsa: " + resid); 
    return resid; 
} 

Le résidu dans ActB est long. Je reçois cette erreur:

06-06 11:10:47.138: W/Bundle(538): Key resid expected Long but value was a java.lang.Integer. The default value 1 was returned. 
    06-06 11:10:47.158: W/Bundle(538): Attempt to cast generated internal exception: 
    06-06 11:10:47.158: W/Bundle(538): java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long 
    06-06 11:10:47.158: W/Bundle(538): at android.os.Bundle.getLong(Bundle.java:966) 
    06-06 11:10:47.158: W/Bundle(538): at android.content.Intent.getLongExtra(Intent.java:3874) 
    06-06 11:10:47.158: W/Bundle(538): at com.gmail.corsalini.celebrityquiz.PageSinglePlayerGuess.getResId(PageSinglePlayerGuess.java:60) 
    06-06 11:10:47.158: W/Bundle(538): at com.gmail.corsalini.celebrityquiz.PageSinglePlayerGuess.onCreate(PageSinglePlayerGuess.java:46) 
    06-06 11:10:47.158: W/Bundle(538): at android.app.Activity.performCreate(Activity.java:4465) 
    06-06 11:10:47.158: W/Bundle(538): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
    06-06 11:10:47.158: W/Bundle(538): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
    06-06 11:10:47.158: W/Bundle(538): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
    06-06 11:10:47.158: W/Bundle(538): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
    06-06 11:10:47.158: W/Bundle(538): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
    06-06 11:10:47.158: W/Bundle(538): at android.os.Handler.dispatchMessage(Handler.java:99) 
    06-06 11:10:47.158: W/Bundle(538): at android.os.Looper.loop(Looper.java:137) 
    06-06 11:10:47.158: W/Bundle(538): at android.app.ActivityThread.main(ActivityThread.java:4424) 
    06-06 11:10:47.158: W/Bundle(538): at java.lang.reflect.Method.invokeNative(Native Method) 
    06-06 11:10:47.158: W/Bundle(538): at java.lang.reflect.Method.invoke(Method.java:511) 
    06-06 11:10:47.158: W/Bundle(538): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
    06-06 11:10:47.158: W/Bundle(538): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
    06-06 11:10:47.158: W/Bundle(538): at dalvik.system.NativeStart.main(Native Method) 

Toute idée comment résoudre ce problème? (Il semble vraiment facile, mais je ne peux pas en sortir)

+0

Avez-vous essayé: 'vip0.putExtra (" resid ", 1L);' – Blundell

Répondre

7

Selon le journal, le problème semble être en suivant:

resid= i.getLongExtra("resid", 1);

changer de façon à:

resid= i.getLongExtra("resid", 1L);

BTW: la mise en œuvre getLongExtra ressemble à ceci:

public long getLongExtra(String name, long defaultValue) { 
    return mExtras == null ? defaultValue : mExtras.getLong(name, defaultValue); 
} 

C'est pourquoi voir qu'il échoue à la ligne:

at android.os.Bundle.getLong(Bundle.java:966) 
+0

Parfait, ça marche. J'ai essayé avec 1l (pas majuscule) et ça n'a pas marché! –

+0

Hm .. étrange "l" devrait également fonctionner http://docs.oracle.com/javase/specs/jls/se5.0/html/lexical.html – sinek

+0

Je ne sais pas pourquoi, mais ça ne marche pas plus.'Intent vip0 = new Intent (this, PageSinglePlayerGuess.class); \t \t \t \t vip0.putExtra ("résidu", 1L); \t \t \t \t startActivity (vip0); ' Même logcat que précédemment! –

2

Change:

vip0.putExtra("resid", 1L); 

Une valeur à long est toujours déclarée avec un suffixe L.

0

Essayez d'utiliser Long.valueOf (Entier int) au lieu de (long) 1

C'est parce qu'il est considéré comme un int encore.

Questions connexes