Ошибка приведения дополнительных значений намерения Android: двойное приведение к целому числу

У меня такая проблема при отправке намерения с дополнительными функциями: значения, указанные как двойные, преобразуются в целое число и не могут быть прочитаны как двойные при получении намерения. Код ниже.

создание Intent в методе onUpdate WidgetProvider:

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);

Получение Intent в методе onReceive WidgetProvider:

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:

предупреждение

Что может вызвать эту ошибку?


person k4b    schedule 25.05.2012    source источник
comment
Проверьте содержимое дополнений в onReceive(). Либо добавьте код отладки, чтобы сбросить лишнее, либо поставьте там точку останова и посмотрите на них. Я предполагаю, что вы на самом деле не отправляете Intent, как вы думаете.   -  person David Wasser    schedule 29.05.2012


Ответы (2)


Чтобы не получать это предупреждение, вы можете вместо этого использовать -100.0, потому что это целое число, на которое он жалуется. Но это не решит вашу проблему.

Ваше намерение, похоже, не имеет значения для ключа LONGITUDE.

person Dirk Jäckel    schedule 12.06.2012

вот несколько советов:

  1. не используйте "новый двойной" . вы можете просто поставить значение в одиночку. компилятор знает, что с этим делать. "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).

person android developer    schedule 12.06.2012