2013-09-28 5 views
6

Ich verstehe nicht, warum diese Ausnahme passiert.Android Ausnahme NameNotFoundException

In meiner Haupttätigkeit, die in dem Verfahren onCreate Ich habe diesen Code auf den ersten:

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"); 
    } 

Die Ausnahme NameNotFoundException ist, möchte ich es lösen, weil ich es verursacht Problem mit dem Facebook-SDK denken.

Danke euch allen.

Wenn hilft, das ist mein 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> 

Antwort

9

erhalten Sie haben Ihren Paketnamen falsch. Verwenden Sie zur Sicherheit immer Context.getPackageName().

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

Dieses Problem tritt auf, wenn Sie Hash-Key-Projekt und die Anwendung haben generieren, für die Hash-Schlüssel sind nicht auf dem einigen Arbeitsbereich/Verzeichnis erstellen, so entsteht Ausnahme NameNotFoundException.

Prost :)

0

Es bedeutet, dass Sie entweder falsche Paketnamen geben oder vielleicht sind Sie über den Paketnamen nicht sicher.

Fall 1. Wenn Sie Ihren Paketnamen kennen, kreuzen Sie ihn einfach an.

Fall 2. Wenn Sie nicht sicher über den Paketnamen sind ( diese Situation entstehen können, auch wenn Sie einen Code Refactoring dh Rename Paket tat)

Es gibt mehrere Ansätze es

zu beheben
  1. Paketname wird in der Oberseite des AndroidManifest.xml

enter image description here erwähnte

  1. Wenn es immer noch nicht behoben ist Paketnamen() von

    Context.getPackageName zu erhalten;

oder

Log.d(); 

In Logcat den Namen Anwendung Spalte Paket überprüfen sollten erwähnt werden.