1

エクストラを使用してインテントを送信するときに、このような問題が発生します。doubleとして設定された値は整数に変換され、インテントを受信するときにdoubleとして読み取ることができません。コードは以下のとおりです。

WidgetProviderのonUpdateメソッドでのインテントの作成:

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メソッドでのインテントの受信:

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

ここにいくつかのヒントがあります:

  1. "new Double" を使用しないでください。値をそのまま置くだけです。コンパイラはそれをどうするかを知っています。"new Double" は、値の代わりに変数を区別したい場合に使用されます。例:

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

    ここでは、 x==y ですが、 x!=z です。

    すべてのコードでそれを変更してみて、それが役立つかどうかを確認してください。

  2. "getDoubleExtra" には、 100 の代わりに 100.0 を使用します。

  3. 値を取得するために、 Double を使用する必要はありません。ダブルは大丈夫です。必要に応じて、デフォルト値として null を使用することもできます (Double を使用する場合)。

于 2012-06-12T21:39:35.180 に答える
0

この警告を受け取らないようにするには、代わりに -100.0 を使用できます。これは、問題の整数であるためです。しかし、それはあなたの問題を解決しません。

あなたのインテントには、キー LONGITUDE の値がないようです。

于 2012-06-12T19:38:07.563 に答える