【问题标题】:Clean way to handle multiple intent.getStringExtra within onReceive?在onReceive中处理多个intent.getStringExtra的干净方法?
【发布时间】:2015-12-18 20:00:13
【问题描述】:

我创建了一个WebService 类来处理对Web 服务的多个不同请求,该类的广播和意图具有不同的key,具体取决于最初在WebService 类中调用的方法。我被困在如何在WebServiceReceiver 上正确处理这个问题...

这是WebService的重要部分:

   //Broadcast the intent with data received from service call.
    broadcastIntent.putExtra(broadcastIntentKeyName, response.toString());
    sendBroadcast(broadcastIntent);

这是我的onReceive

public class WebServiceReceiver extends BroadcastReceiver
{

    public WebServiceReceiver() {}

    @Override
    public void onReceive(Context context, Intent intent) {

        Debug.waitForDebugger();

        //NOTE: Not sure if i'm approaching this the right way, sure doesn't seem like it... 
        //Its possible that some of these will be NULL.
        String GetRequestForRouteWithDriverId_DATA = intent.getStringExtra("Helper_GetRequestForRouteWithDriverId");
        String StoreDataInServer_DATA = intent.getStringExtra("Helper_StoreDataInServer");
        String SubmitDriverRouteData_DATA = intent.getStringExtra("Helper_SubmitDriverRouteData");

        MainActivity.getInstance().updatetextViewControl(GetRequestForRouteWithDriverId_DATA);

    }
}

我所拥有的确实有效,但就像我在代码注释中提到的那样,它感觉不是正确的方法。

有没有更好的方法来解决这个问题?我只是想重新使用这个onReceive 来处理所有WebService 广播。

【问题讨论】:

  • 为什么不发送一个字符串和一个整数/枚举,然后在整数上发送switch()
  • @user3137702 我无法切换,我需要先从意图中获取数据,如果不尝试读取每个文件,我无法知道哪个是intent 不是NULL我现在正在做的一个 - 至少我不知道有什么方法可以做到这一点,这就是我问这个问题的原因。
  • 如果您无法控制发送的意图,那么您正在做的就是正确的基本方法,尽管闻起来很糟糕。
  • @user3137702 我更新了问题以显示在我的WebService 课程中找到的broadcastIntent,我只是在做一个putExtra
  • 在发送广播之前,您可以在其中放置一个开关或地图查找或其他东西。它至少会将臭味部分与需要它的网络调用相邻,并允许您向自己的接收器发送不同的意图类型,而不是把所有东西都塞进额外的东西中。

标签: android android-intent android-intentservice android-broadcastreceiver


【解决方案1】:

也许你可以使用Intent.setAction()方法

    broadcastIntent.setAction("Your action");
    broadcastIntent.putExtra("Your Extra");
    sendBroadcast(broadcastIntent);

然后在你的接收器上...

public class WebServiceReceiver extends BroadcastReceiver
{

public WebServiceReceiver() {}

    @Override
    public void onReceive(Context context, Intent intent) {

        String action = intent.getAction();
        if(action.equals("Your Action")){
            String yourExtra = intent.getStringExtra("Your extra")
        }

    }
}

【讨论】:

    猜你喜欢
    • 2012-04-20
    • 2011-12-27
    • 2013-09-06
    • 1970-01-01
    • 2011-03-20
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多