2012-04-05 3 views
1

내 응용 프로그램의 버전 번호를 가져오고 싶지만 응용 프로그램을로드 할 때 응용 프로그램이 충돌합니다.버전 번호를 가져 오려고했지만 응용 프로그램이 충돌 함

int currentVersionCode; 
try { 
    currentVersionCode = this.getPackageManager().getPackageInfo(
      this.getApplicationInfo().packageName, 0).versionCode; 
    Toast.makeText(this, currentVersionCode, Toast.LENGTH_SHORT).show(); 
} catch (NameNotFoundException e) { 
    return; 
} 

로그 캣 :

04-05 16:01:43.108: D/LocationManager(1109): Constructor: service = [email protected] 
04-05 16:01:43.198: W/ResourceType(1109): No package identifier when getting name for resource number 0x00000001 
04-05 16:01:43.208: D/AndroidRuntime(1109): Shutting down VM 
04-05 16:01:43.208: W/dalvikvm(1109): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 
04-05 16:01:43.208: E/AndroidRuntime(1109): Uncaught handler: thread main exiting due to uncaught exception 
04-05 16:01:43.228: E/AndroidRuntime(1109): java.lang.RuntimeException: Unable to start activity ComponentInfo{weather.right.now/weather.right.nowActivity}: android.content.res.Resources$NotFoundException: String resource ID #0x1 
04-05 16:01:43.228: E/AndroidRuntime(1109):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 
04-05 16:01:43.228: E/AndroidRuntime(1109):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
04-05 16:01:43.228: E/AndroidRuntime(1109):  at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
04-05 16:01:43.228: E/AndroidRuntime(1109):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
04-05 16:01:43.228: E/AndroidRuntime(1109):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-05 16:01:43.228: E/AndroidRuntime(1109):  at android.os.Looper.loop(Looper.java:123) 
04-05 16:01:43.228: E/AndroidRuntime(1109):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
04-05 16:01:43.228: E/AndroidRuntime(1109):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-05 16:01:43.228: E/AndroidRuntime(1109):  at java.lang.reflect.Method.invoke(Method.java:521) 
04-05 16:01:43.228: E/AndroidRuntime(1109):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
04-05 16:01:43.228: E/AndroidRuntime(1109):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
04-05 16:01:43.228: E/AndroidRuntime(1109):  at dalvik.system.NativeStart.main(Native Method) 
04-05 16:01:43.228: E/AndroidRuntime(1109): Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x1 
04-05 16:01:43.228: E/AndroidRuntime(1109):  at android.content.res.Resources.getText(Resources.java:200) 
04-05 16:01:43.228: E/AndroidRuntime(1109):  at android.widget.Toast.makeText(Toast.java:258) 
04-05 16:01:43.228: E/AndroidRuntime(1109):  at weather.right.nowActivity.onCreate(nowActivity.java:58) 
04-05 16:01:43.228: E/AndroidRuntime(1109):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
04-05 16:01:43.228: E/AndroidRuntime(1109):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 
04-05 16:01:43.228: E/AndroidRuntime(1109):  ... 11 more 
04-05 16:01:43.248: I/dalvikvm(1109): threadid=7: reacting to signal 3 
04-05 16:01:43.258: I/dalvikvm(1109): Wrote stack trace to '/data/anr/traces.txt' 

어떻게 내 문제를 해결할 수 있습니까?

미리 감사드립니다.

답변

2
float currentVersionCode; 
try { 
    currentVersionCode = this.getPackageManager().getPackageInfo(
      this.getApplicationInfo().packageName, 0).versionCode; 
    Toast.makeText(this, ""+currentVersionCode, Toast.LENGTH_SHORT).show(); 
} catch (NameNotFoundException e) { 
    return; 
} 

이 시도 ... 사소한 변화

을 참조 용으로 아래를 사용하여 ...

String versionName = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName; 
+0

1.3을 얻지 못할 것입니다. –

+0

흠. 얼마나 사납다. 그것은 1.0 : S Woa를 인쇄합니다! 기다림! 'android : versionName'은 1.3이고, 안드로이드 : versionCode가 아닙니다. 감사! – Erik

1

문제는 버전을 Toast.makeText에 int로 전달한다는 것입니다. makeText에 int를 전달하면 String 리소스 ID라고 가정합니다. 이것이 문자열 리소스를 찾을 수없는 오류가 발생하는 이유입니다.

버전 코드를 makeText에 전달하기 전에 String으로 변환하십시오.

+0

감사합니다. 그러나'int currentVersionCode;를'String currentVersionCode; '로 변경했을 때'타입 불일치 : int에서 String으로 변환 할 수 없습니다'라는 메시지가 나타납니다. – Erik

+0

Toast.makeText (this, "+ currentVersionCode, Toast.LENGTH_SHORT) .show(); –

+0

@Agarwal : 감사하지만 '1'만 출력합니다. 내 안드로이드 Manifest.xml 파일에 : android : versionName = "1.3"'나는 또한 – Erik

1

당신은 다음 versionName을을 원하는 경우

String currentVersionName; 
    try { 
     currentVersionName = this.getPackageManager().getPackageInfo(
       this.getApplicationInfo().packageName, 0).versionName; 
     Toast.makeText(this, currentVersionName, Toast.LENGTH_SHORT).show(); 
    } catch (NameNotFoundException e) { 
     e.printStackTrace(); 
    } 

더 적절하다면 그럴 것이다.

android:versionCode="1" 
    android:versionName="Mickey Mouse" 

"미키 마우스"가 표시됩니다. 대답은 "1"로 표시됩니다