2014-02-04 2 views
1

я работал на андроид проект с использованием затмения, и вдруг я начал получать эту ошибку:Android проекта с использованием Eclipse, дает ошибку: Не удается переключиться на значении типа String, для уровня источника ниже 1,7

Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted.

Я пытался каждое решение в предыдущих аналогичных проблемах, но никто из них не работал для меня ...

Я пробовал исправить проект и установить уровень соответствия JDK 1,7 как в моем проекте, так и для всего проекта.

Я использую ADT Телосложение: v22.2.1-833290 и Eclipse:

String text = mService.getString(); 
switch (text) { 
    case Protocols.REQUEST_SEND_MESSAGE: 
     publishProgress("sent"); 
     break; 
    case Protocols.RESPONSE_OK: 
     mService.sendMessage("mesasage"); 
     publishProgress("sent"); 
     break;    
    default: 
     break; 
} 

Что происходит?

+0

ли вы предоставить некоторый код был добавлен – Rudi

+0

кода, но я думаю, @ ответ beworker логичен. Я могу просто использовать 'if/else' –

ответ

3

Вы пытаетесь использовать switch/case с объектами String, которые доступны только на Java 1.7 или новее. Android ADT требует Java 1.6. Это означает, что вы не можете использовать switch с конструкцией String. Просто замените его на if/else.

Замените код на это.

String text=mService.getString(); 
if (Protocols.REQUEST_SEND_MESSAGE.equals(text)) { 
    publishProgress("sent"); 
} else if (Protocols.RESPONSE_OK.equals(text)) { 
    mService.sendMessage("mesasage"); 
    publishProgress("sent"); 
} 

Другим вариантом было бы создать enum и поместить все константы протокола в там. Затем вы сможете использовать switch/case с enum значениями.

+0

Хорошо, спасибо. Но есть ли способ обойти эту ошибку? Обновить ? или плагин? может быть, новая версия Eclipse или ADT или обновление? –

+0

Да, я уже реализовал его как 'if/else', но код становился немного грязным, потому что было намного больше случаев, поэтому я думал о том, чтобы сделать его более аккуратным в случае с' switch'. Спасибо за вашу помощь. –

+0

Вы должны реорганизовать этот код, если/else все время до тех пор, пока Android не начнет поддерживать Java 1.7. Других вариантов нет. –

2

Как показано ниже, оператор switch на объектах String является новой функцией, введенной в Java 1.7. Unfortunatelly Android требует версии 1.6 или 1.5. :

https://stackoverflow.com/a/14367642/1572408

+0

Спасибо, есть полезная ссылка для проверки позже в этом сообщении [ссылка] (http://stackoverflow.com/questions/7349883/how-to-remove-large-if-else-if-chain) –

+0

не беспокоится , Великий :) – Rudi