Search code examples
javaandroidbroadcastreceiverbroadcast

How to extract intents of dynamic broadcasts


I am using a dynamic broadcast receiver to receive a broadcast from a separate class that is sending a list as its intent. The problem is that the intent, upon reception, is null. Is this a consequence of the type of intent filter i used?

broadcast origin

  private void sendToUI(List tweets) {
        Intent intent = new Intent("tweet_result"); //tweet_result is a string to identify this intent
        Bundle bundle = new Bundle();
        bundle.putParcelableArrayList("data", (ArrayList<? extends Parcelable>) tweets);
        intent.putExtras(bundle);
        sendBroadcast(intent);
    }

broadcast receiver

    private BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            List<tweet> tweets = (List<tweet>) intent.getExtras().get("data");

            if (tweets == null) {
                tweets_results.setText("No tweets");
                return;
            } else {
                for (tweet tweet : tweets) {
                    String content = "";
                    content += "Created at: " + tweet.getCreated_at() + "\n";
                    content += "Text: " + tweet.getText() + "\n";
                    content += "Retweets: " + tweet.getRetweet_count() + "\n";
                    content += "Favs: " + tweet.getFavorite_count() + "\n\n";
                    tweets_results.append(content);
                }
            }
        }
    };
   @Override
    public void onStart() {
        super.onStart();
        IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
        getActivity().registerReceiver(receiver, filter);
    }

    @Override
    public void onStop() {
        super.onStop();
        getActivity().unregisterReceiver(receiver);
    }

Solution

  • You have to fix few things.

    @Override
    public void onStart() {
        super.onStart();
        IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
        filter.addAction("tweet_result");
        getActivity().registerReceiver(receiver, filter);
    
    
    }
    
    private BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            List<tweet> tweets = (List<tweet>)
         intent.getParcelableArrayList("data");
    
            if (tweets == null) {
                tweets_results.setText("No tweets");
                return;
            } else {
                for (tweet tweet : tweets) {
                    String content = "";
                    content += "Created at: " + tweet.getCreated_at() + "\n";
                    content += "Text: " + tweet.getText() + "\n";
                    content += "Retweets: " + tweet.getRetweet_count() + "\n";
                    content += "Favs: " + tweet.getFavorite_count() + "\n\n";
                    tweets_results.append(content);
                }
            }
        }
    };