2014-05-13 3 views
2

Je souhaite transmettre une donnée d'un service à un fragment. Voici mon code dans le servicePassage de données du service au fragment

public void putInfo(){ 
    Intent trIntent = new Intent("android.intent.action.MAIN"); 
    trIntent.setClass(this,WelcomeActivity.class); 
    trIntent.putExtra("info", strengthAmplitude+""); 
    trIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(trIntent); 
    } 

Et puis je veux utiliser ces données ("info") dans mon fragment (InfoFragment) comme que

String msg = getActivity().getIntent().getExtras().getString("info"); 

Je recevais des erreurs.

E/AndroidRuntime(25036): java.lang.RuntimeException: Unable to start service 
[email protected] with Intent { 
cmp=com.BackupAndTools/.service.InfoService }: 
android.content.ActivityNotFoundException: Unable to find explicit activity class 
{com.BackupAndTools/com.BackupAndTools.views.InfoFragment}; have you declared this 
activity in your AndroidManifest.xml? 

alors que c'est un fragment pas une activité à déclarer dans AndroidManifets.xml !!

+0

I pense que vous devez mettre en œuvre une activité et à travers cette activité appelez le fragment, votre problème résoudra marya –

+0

En fait, c'est ce que je fais réellement. J'appelle le fragment (InfoFragment) d'une activité (WelcomeActivity). J'ai édité mon code comme vous l'avez suggéré alors jetez un coup d'oeil. Mais je ne peux toujours pas obtenir les données car j'ai une exception NullPointerException dans cette ligne Chaîne msg = getActivity(). GetIntent(). GetExtras(). GetString ("info"); dans le fragment – Marya

+0

Ya, puis appelez cette activité du service également. –

Répondre

0

Essayez d'ajouter un récepteur dans votre Fragment:

class CustomReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String data= intent.getExtra(DATA); 
    } 
} 

maintenant dans votre Fragment enregistrez le récepteur avec un filtre intention:

@Override 
public void onStart() { 
    super.onStart(); 
    receiver = new CustomReceiver(); 
    IntentFilter filter = new IntentFilter(); 
    filter.addAction(MY_TRIGGER); 
    getActivity().registerReceiver(receiver, filter); 
} 

maintenant dans votre service:

public class NumberThoery extends Service { 


public static String MY_TRIGGER = "trigger"; 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    intent.putExtra(DATA,"test"); 
    sendBroadcast(intent,MY_TRIGGER); 
    return START_STICKY; 
} 



@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 
} 
Questions connexes