2013-01-16 17 views
33

मैं ग्रहण पर एक Android एप्लिकेशन विकसित करने कर रहा हूँ, जब मैंएंड्रॉयड कोडिंग

switch(String){ 
...... 
} 

जैसे कुछ कोड की कोशिश यह मुझे निम्न त्रुटि

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

तो मैं बदल देना 1.7 संकलक, तो यह मुझे एक और त्रुटि

Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties. 

दे तो, वहाँ वैसे भी जाने के लिए स्विच (स्ट्रिंग) है एंड्रॉयड आवेदन में काम करता है? या मैं कोई चारा नहीं उपयोग करने के लिए

if(){} 
else if(){} 
else if(){} 
........ 
+0

इस http://stackoverflow.com/questions/338206/switch-statement-with-strings-in-java इसमें कुछ रोचक जवाब – RNJ

उत्तर

34

switch बयान जावा 1.7 में शुरू की एक नई सुविधा है। दुर्भाग्य से एंड्रॉइड संस्करण 1.6 या 1.5 की आवश्यकता है। यही कारण है कि आपको इस तरह के निर्माण के बारे में कुछ समय भूलना है।

आप कुछ String: Map<String, Method> के लिए निष्पादित किए जाने वाले तरीकों के मानचित्र को संग्रहीत करके if-statement-chain का उपयोग करने से बच सकते हैं। आप Method को Handler ऑब्जेक्ट के साथ हमेशा encapsulate कर सकते हैं। अधिक जानकारी के लिए देखें: How to remove large if-else-if chain

और

why-cant-i-switch-on-a-string

+0

समझ में आ गया गया है पर एक नज़र, कि एक बहुत मदद करता है ले लो। धन्यवाद! – jing1988ccc

+0

आपका स्वागत है :) –

+26

यह उत्तर किटकैट के रिलीज के साथ बहिष्कृत है। [नवीनतम उत्तर] जांचें (http://stackoverflow.com/questions/14367629/android-coding-with-switch-string/19722741#19722741) – mente

6

आप कोई विकल्प नहीं है की है। आप Switch स्ट्रिंग्स के साथ काम नहीं कर सकते (कम से कम अभी के लिए)। निम्नलिखित संदेश स्पष्ट रूप से अनुरूप है।

Android को संकलक अनुपालन स्तर 5.0 या 6.0 की आवश्यकता है। मिले '1.7' के बजाय String वस्तुओं पर

88
एपीआई 19 के रिलीज किटकैट अब आप यह कर सकते हैं के साथ

!!!! मौजूदा परियोजनाओं के लिए एंड्रॉइड स्टूडियो के लिए आपको यह बदलाव चाहिए। सुनिश्चित करें कि आप JDK 1.7 या बाद में और Gradle प्लगइन 0.6.1 का उपयोग कर रहे या बाद में

android { 
compileSdkVersion 19 
buildToolsVersion "19.0.0" 

defaultConfig { 
    minSdkVersion 7 
    targetSdkVersion 19 
} 

compileOptions { 
    sourceCompatibility JavaVersion.VERSION_1_7 
    targetCompatibility JavaVersion.VERSION_1_7 
} } 
+10

यदि मैं ऐसा करता हूं, तो क्या मेरा ऐप एपीआई 1 की तुलना में फोन प्रेमी पर काम करेगा? – Eddwhis

+4

@Eddwhis हाँ, यह अभी भी काम करेगा! स्रोत: परीक्षण 'स्विच ("परीक्षण") {केस "परीक्षण": Log.e ("यय", "यह काम करता है"); टूटना; } 'एपीआई 18 पर! – bclymer

+0

तो क्या यह 'compileOptions' है जो यहां महत्वपूर्ण बात है? – Tim

3

यहाँ आप ऐसा कर सकते हैं जावा 5 या 6

public enum Command {text, image, other}; 

String enumTest = "text"; 
try{ 
    Command command = Command.valueOf(enumTest); 
} 
catch(Exception e){ 
    Log.e("Tag", "Command not found: " + enumTest); 
} 
switch (command){ 
    case image: 
     break; 
    case text: 
     break; 
} 
5

साथ Android के लिए अन्य विकल्प नहीं है नवीनतम एंड्रॉइड निर्माण उपकरण के साथ। एंड्रॉयड एपीआई 19.

सबसे अच्छी बात यह है कि यह भले ही आप अपने minSdkVersion सेट काम करेंगे 19. तुलना में कम है के बाद से जावा 7 सुविधा का समर्थन करना शुरू का हवाला देते हुए इस android developer page:

ध्यान दें कि आप एक साथ minSdkVersion उपयोग कर सकते हैं संसाधनों के साथ प्रयास करने के अलावा सभी भाषा सुविधाओं के लिए 1 9 से पहले मूल्य। आप संसाधनों के साथ की कोशिश का उपयोग करना चाहते हैं, तो आप जब से मैं ज्यादातर लोगों जावा 7 के कम से कम एक न्यूनतम है, तो जवाब के साथ एंड्रॉयड स्टूडियो का उपयोग कर रहे हैं मान भी 19.

0

के minSdkVersion का उपयोग करने की आवश्यकता होगी, हां, आप एंड्रॉइड में स्ट्रिंग्स को स्विच कर सकते हैं, यहां तक ​​कि minSdkVersion संस्करण < 19 के लिए भी।यहाँ यह कैसे करना है का एक उदाहरण है, Java SE Documentation से लिया:

public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) { 
    String typeOfDay; 
    switch (dayOfWeekArg) { 
     case "Monday": 
      typeOfDay = "Start of work week"; 
      break; 
     case "Tuesday": 
     case "Wednesday": 
     case "Thursday": 
      typeOfDay = "Midweek"; 
      break; 
     case "Friday": 
      typeOfDay = "End of work week"; 
      break; 
     case "Saturday": 
     case "Sunday": 
      typeOfDay = "Weekend"; 
      break; 
     default: 
      throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg); 
    } 
    return typeOfDay; 
} 

डॉक्स यह भी ध्यान रखें:

  • का उपयोग स्ट्रिंग स्विचिंग आम तौर पर तेजी से श्रृंखलित if है - else
  • ऐसा लगता है जैसे प्रत्येक मामले String.equals का उपयोग कर रहा था।
संबंधित मुद्दे