1

我在发送带有附加功能的意图时遇到这样的问题:作为双精度的值被转换为整数,并且在接收意图时不能被读取为双精度。代码如下。

在 WidgetProvider 的 onUpdate 方法中创建 Intent:

Intent send = new Intent("ACTION_SEND_DATA");
send.putExtra("url", "http://some-url.com");
send.putExtra(LONGITUDE, new Double(13.65));
send.putExtra(LATITUDE, new Double(43.12));
PendingIntent sendPendingIntent = PendingIntent.getBroadcast(context, 0, send, 0);
views.setOnClickPendingIntent(R.id.Change, sendPendingIntent);

在 WidgetProvider 的 onReceive 方法中接收 Intent:

else if (intent.getAction().equals("ACTION_SEND_DATA"))
  {
      Log.d("WIDGET", "received ACTION_SEND_DATA intent");
      String msg = intent.getStringExtra("url");
      Bundle extras = intent.getExtras();
      if (extras != null) 
      {
        // Get data via the key
          String url = extras.getString("url");
          Double longitude = new Double(intent.getDoubleExtra(LONGITUDE, -100));
          Double latitude = new Double(extras.getDouble(LATITUDE, -100));
          msg = "received: " + url + " " + longitude + " " + latitude;
          sendData(extras);
      }
      else
          msg += " no extras!";
      
      Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
  }

这行:

Double longitude = new Double(intent.getDoubleExtra(LONGITUDE, -100));
Double latitude = new Double(extras.getDouble(LATITUDE, -100));

在 DDMS LogCat 中抛出警告:

警告

什么会导致此错误?

4

2 回答 2

0

要不收到此警告,您可以使用 -100.0 代替,因为这是它抱怨的整数。但这不会解决你的问题。

您的 Intent 似乎没有关键 LONGITUDE 的值。

于 2012-06-12T19:38:07.563 回答
0

这里有一些提示:

  1. 不要使用 "new Double" 。你可以简单地把值单独放在一起。编译器知道如何处理它。如果您希望在变量而不是值之间有所不同,则使用“new Double”。例如:

    Double x=10.0,y=x,z=new Double(x);
    

    所以在这里, x==y ,但是 x!=z 。

    尝试在所有代码中更改它,看看它是否有帮助。

  2. 对于 "getDoubleExtra" ,使用 100.0 而不是 100 。

  3. 要获取值,您不需要使用 Double 。双倍没问题。如果您愿意,也可以使用 null 作为默认值(如果您使用 Double)。

于 2012-06-12T21:39:35.180 回答