2012-03-08 3 views
1

У меня есть странная проблема в настройке моего приложения для Android, которое связано с передачей значений между различными классами (или экранами). В основном у меня есть класс меню, который переходит к этому классу (classA), а затем к третьему классу (класс B). ClassA имеет кнопку, чтобы перейти к классу B, который затем выполнит операцию и перейдет обратно к классу A.Странный вопрос о намерениях: получение удвоений из другого класса (Android)

Проблема лежит в этих строках кода:

Intent it = getIntent();   
    if (it != null) 
    { 
     Bundle b = getIntent().getExtras(); 
     double result = b.getDouble("weight"); 
     double result2 = b.getDouble("height"); 
     if((result > 0)&&(result2 > 0)) 
     { 
      mDateDisplay.setText("weight: "+result+"height"+result2); 
     } 
    } 
    else 
    { 
     //do nothing 
    } 

проблема заключается в том, что он разбился приложение, когда я пришел на экран из меню я настроил. Первоначально я понятия не имел, что это за проблема, но потом я понял, что проблема заключается в намерении. из-за меня, исходящего из предыдущего экрана, есть намерение, отправленное в этот класс. поэтому, когда он проверяет наличие нулевого намерения, он находит намерение, отправленное из меню. это означает, что выполнение инструкции if произойдет и приведет к ошибке.

Мне интересно, есть ли решение этой проблемы.

ответ

0

Как я понимаю, этот код терпит неудачу, потому что он получает намерение, которое он не оборудован для обработки. Он пытается получить двойное от намерения, которое не содержит двойной.

Решение состоит в том, чтобы дифференцировать ваши намерения, чтобы вы только вызывали код, когда знаете, что получили намерение, которое идет с этим кодом. То есть, какой-то аспект каждого используемого вами намерения должен быть уникальным, чтобы вы могли указать Intent A от Intent B.

Лучший способ сделать это - создать собственное собственное действие Intent с использованием собственного пространства имен или например, «com.example.mydomain.intent.intent1». Таким образом, вы можете проверить, есть ли входящее намерение, которое вы хотите обработать.

Если вы используете намерения в своей заявке, и вы не используете аутсайдеров, чтобы использовать их, то не используйте фильтры намерений. Вместо этого создайте намерение, основанное на ComponentInfo целевой активности. Вы все равно можете использовать действия.

Ошибка кода, который вы показываете здесь, заключается в том, что он будет вызван для любым входящим намерением, и если вы используете фильтрацию намерений, вы можете случайно получить намерение от другого приложения! В общем, используйте сильную фильтрацию намерений или отправляйте намерения по имени компонента и всегда проверяйте намерения в своем коде, прежде чем действовать на них.

+0

, так какие способы сказать классу, что это за намерение. есть ли другой тип звонка или так я устанавливаю намерение по-другому. –

+0

также у меня было решение о дублировании класса, и у меня есть тот, который берет вызов из класса B и один из них получил класс меню –

Смежные вопросы