意图内容未被解析为intentservice

时间:2018-04-13 14:22:50

标签: android android-intent action intentservice

我无法将带有操作的意图传递给intentservice。可以启动服务并且意图不为null但操作为空。使用putExtra时会出现同样的问题。

当我到达第一个断点时,我可以看到该动作已被填充,但当我在onHandleIntent方法中到达断点时,我的动作为空。 onStart方法和onStartCommand方法中的操作也已为空。

我已经包含了我的intentservice类的代码。我使用方法getNewDeck作为辅助方法,以便我能够从各种活动中调用此方法,而无需创建意图或忘记某些参数。此帮助程序方法启动该服务。但是我已经从一项活动中启动了这项服务,问题仍然存在,所以我不认为问题就在那里。

public class MyService extends IntentService {

public static final String TAG="MyService";
public static final String MY_SERVICE_MESSAGE="myServiceMessage";
public static final String MY_SERVICE_PAYLOAD="myServicePayload";


private static final String SR_GET_NEW_DECK="getNewDeck";
private static final String SR_DRAW_CARDS_FROM_DECK="drawCardsFromDeck";

private static final String PARAM_DECK_ID="deckID";

private static final String PARAM_DRAW_CARDS_FROM_DECK_COUNT="count";



private DeckApiService deckApiService;
/**
 * Creates an IntentService.  Invoked by your subclass's constructor.
 */
public MyService() {
    super("MyService");
}



public static void getNewDeck(Context context) {
    Intent i=new Intent(context,MyService.class);
    i=i.setAction(SR_GET_NEW_DECK);
    context.startService(i); //breakpoint (action is "getNewDeck" here.)
}




@Override
protected void onHandleIntent(Intent intent) {
    Intent messageIntent=null;

    deckApiService=DeckApiService.retrofit.create(DeckApiService.class);


    if (intent != null) {

        final String action = intent.getAction(); // breakpoint (intent.getAction() is null here)

        try {
            switch (action) {
                case SR_GET_NEW_DECK:
                    //Geeft een nieuw deck terug, het deckid is op te vragen
                    messageIntent = handleGetNewDeck();
                    break;

                case SR_DRAW_CARDS_FROM_DECK:
                    //Geeft een pile terug met getrokken kaarten uit een deck
                    //in de intent zijn deckID en het aantal te trekken kaarten meegegeven
                    messageIntent = handleDrawCardsFromDeck(intent);
                    break;

                default:
                    Log.d(TAG, "onHandleIntent: Wrong parameters");
                    messageIntent = null;
                    break;

            }
        } catch (Exception e) {
            e.printStackTrace();
            Log.d(TAG, "onHandleIntent: Wrong intent");
            messageIntent = null;
        }
    }


    if(messageIntent!=null) {
        LocalBroadcastManager manager = LocalBroadcastManager.getInstance(getApplicationContext());
        manager.sendBroadcast(messageIntent);
    }

}

1 个答案:

答案 0 :(得分:0)

问题没有在这部分代码中创建,我在另一个方法中使用空意图启动了intentservice。在第一次调用完成后,使用了上面代码中创建的意图。