【发布时间】: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