2013-09-28 65 views
6

我不明白爲什麼會發生此異常。Android例外名稱NotFoundException

在我的主要活動,在方法的onCreate我有這樣的代碼在第一:

try { 
     PackageInfo info = this.getPackageManager().getPackageInfo("com.mypacket", PackageManager.GET_SIGNATURES); 

     for (Signature signature : info.signatures) { 
      MessageDigest md = MessageDigest.getInstance("SHA"); 
      md.update(signature.toByteArray()); 
      Log.e("Hash", Base64.encodeToString(md.digest(), Base64.DEFAULT)); 
     } 
    } catch (NameNotFoundException e) { 
     Log.e("Hash", "Error: NameNotFoundException"); 
     e.printStackTrace(); 

    } catch (NoSuchAlgorithmException e) { 
     Log.e("Hash", "Error: NoSuchAlgorithmException"); 
    } 

唯一的例外是的NameNotFoundException,我想解決這個問題,因爲我認爲它會導致問題與Facebook的SDK。

謝謝大家。

如果有幫助,這是我的AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.myPackageName.app" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="17" /> 

    <supports-screens android:anyDensity="true" 
        android:largeScreens="true" 
        android:normalScreens="true" 
        android:smallScreens="true" 
        android:xlargeScreens="true" />      

    <permission android:name="com.myPackageName.app.permission.MAPS_RECEIVE" android:protectionLevel="signature"/> 
    <uses-permission android:name="com.myPackageName.app.permission.MAPS_RECEIVE"/> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 


    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <permission android:name="com.myPackageName.app.permission.C2D_MESSAGE" android:protectionLevel="signature" /> 
    <uses-permission android:name="com.myPackageName.app.permission.C2D_MESSAGE" /> 





<uses-feature 
android:glEsVersion="0x00020000" 
android:required="true"/>  

    <application 
     android:name="@string/app_name" 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 

     <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/> 

     <receiver 
      android:name=".GcmBroadcastReceiver" 
      android:permission="com.google.android.c2dm.permission.SEND" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <category android:name="com.myPackageName.app" /> 
      </intent-filter> 
     </receiver> 
     <service android:name=".GcmIntentService" /> 


     <activity 
      android:name="com.myPackageName.app.SplashScreen" 
      android:screenOrientation="portrait" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 



     <!-- Google Maps V2 API KEY --> 
     <meta-data 
      android:name="com.google.android.maps.v2.API_KEY" 
      android:value="apy key" />     
    </application> 

</manifest> 

回答

9

你的軟件包名稱錯誤。爲了安全起見,請始終使用Context.getPackageName()

PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackageName(), PackageManager.GET_SIGNATURES); 
0

這個問題,當你有生成散列重點項目以及您所創建的哈希鍵的應用程序是不是在某些工作區/目錄中出現,所以出現異常的NameNotFoundException。

乾杯:)

0

這意味着,無論你是給錯了包的名字或者你不能確定包的名稱。

案例1.如果您知道您的軟件包名稱,只需交叉檢查即可。

案例2.如果你不能確定包名稱這種情況也可能發生,當你做了一些代碼重構,即重命名包)

有解決它

多種方法
  1. 包名在AndroidManifest.xml

enter image description here的頂部提到

  • 如果仍然沒有解決由

    Context.getPackageName()來獲得包名稱;

  • Log.d(); 
    

    在logcat的檢查應用程序列包名稱應當有提及。