0

我正在尝试通过从服务器获取项目发件人 ID 来动态设置它,但它会引发无效的发件人 ID 异常。我正在从基础应用程序类中的服务器获取发件人 ID,以确保在应用程序启动之前获取它,并且我还覆盖了 GCMIntentService 中的 getSenderIds() 方法。

    public GCMIntentService() {  
        super();
    }

    @Override
    protected String[] getSenderIds(Context context) {
         String[] ids = new String[1];
         ids[0] = SENDER_ID;
         return ids;
    }  

但我收到了无效的发件人 ID 异常。如果有人可以就如何从服务器动态设置发件人 ID 给我一个明智的意见,我将不胜感激。

4

1 回答 1

1

好的,我设法做到了我自己。我会试着解释一下。所以,首先我编辑了 getSenderIds() 方法,如下所示:

     @Override
    protected String[] getSenderIds(Context context) {

            updateSenderIdTask(context);
            String[] ids = new String[1];
            ids[0] = getSenderId(context);
            return ids;
    }  

以前我已将 ids[0] 设置为我将在 updateSenderIdTask 方法中设置的变量 SENDER_ID。抛出了无效的发件人 id 异常,因为 GCM 会在 updateSenderIdTask 方法执行之前访问 SENDER_ID 变量,即使我已经在基础应用程序类中调用了它。因此,我在 getSenderIds 覆盖方法中调用了 updateSenderTask,以确保在 GCM 使用它之前从服务器获取 id。为了仔细检查,我将 ids[0] 设置为本地方法 getSenderId。这是它的实现:

    static String getSenderId(Context context) {

            CustomSharedPrefs prefs = CustomSharedPrefs.getInstance(context);
            if (prefs.getString(Constants.SENDER_ID).equals("0")
                    || prefs.getString(Constants.SENDER_ID) == null) {
                updateSenderIdTask(context);
            }
            Log.e("returned sender_id", prefs.getString(Constants.SENDER_ID));
            return prefs.getString(Constants.SENDER_ID);

}  

updateSenderIdTask 方法从服务器获取 id 并将其存储在共享首选项变量中。

于 2013-10-08T08:33:52.350 回答