Intent 内容未被解析为 intentservice
Intent content is not being parsed to intentservice
我在将带有操作的意图传递给 intentservice 时遇到问题。服务可以启动,意图不为空,但操作为空。使用 putExtra 时也会出现同样的问题。
当我到达第一个断点时,我可以看到操作已被填充,但是当我到达 onHandleIntent 方法中的断点时,我的操作是空的。
该操作在 onStart 方法和 onStartCommand 方法中也已经为空。
我已经包含了我的 intentservice class 的代码。我将方法 getNewDeck 用作辅助方法,这样我就可以从各种活动中调用此方法,而无需创建意图或可能忘记某些参数。此辅助方法启动服务。但是我已经从 activity 启动了服务,但问题仍然存在,所以我认为问题不在那里。
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);
}
}
问题不是在这部分代码中产生的,我在另一个方法中以一个空的意图启动了 intentservice。在上面的代码中创建的意图在第一次调用完成后使用。
我在将带有操作的意图传递给 intentservice 时遇到问题。服务可以启动,意图不为空,但操作为空。使用 putExtra 时也会出现同样的问题。
当我到达第一个断点时,我可以看到操作已被填充,但是当我到达 onHandleIntent 方法中的断点时,我的操作是空的。 该操作在 onStart 方法和 onStartCommand 方法中也已经为空。
我已经包含了我的 intentservice class 的代码。我将方法 getNewDeck 用作辅助方法,这样我就可以从各种活动中调用此方法,而无需创建意图或可能忘记某些参数。此辅助方法启动服务。但是我已经从 activity 启动了服务,但问题仍然存在,所以我认为问题不在那里。
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);
}
}
问题不是在这部分代码中产生的,我在另一个方法中以一个空的意图启动了 intentservice。在上面的代码中创建的意图在第一次调用完成后使用。