2013-09-28 10 views
6

Nie rozumiem, dlaczego tak się dzieje z tym wyjątkiem.Wyjątek Android NameNotFoundException

w moim głównym działalności w sposobie onCreate Mam ten kod najpierw:

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

Wyjątkiem jest NameNotFoundException, chcę go rozwiązać, ponieważ myślę, że powoduje problemy z Facebooka SDK.

Dziękuję wszystkim.

Jeśli nie pomaga, to jest mój 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> 

Odpowiedz

9

Twoja nazwa pakietu jest nieprawidłowa. Ze względów bezpieczeństwa zawsze używaj: Context.getPackageName().

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

Ten problem pojawia się, gdy trzeba wygenerować projekt klawisz krzyżyka i aplikację, dla której chcesz utworzyć klawisz skrótu nie są na kilka Przestrzeń robocza/katalogu, więc wyjątek powstaje NameNotFoundException.

Cheers :)

0

Oznacza to, że albo dajesz zły nazwę pakietu, a może nie jesteś pewien co do nazwy pakietu.

Przypadek 1. Jeśli wiesz o nazwie swojego opakowania, po prostu sprawdź to.

Przypadek 2. jeśli nie jesteś pewien co do nazwy pakietu ( sytuacja ta może również pojawić się, gdy zrobiłeś trochę kodu Refaktoryzacja czyli Zmień nazwę pakietu)

Istnieje wiele metod, aby to naprawić

Nazwa
  1. pakiet jest wymieniony w górnej części AndroidManifest.xml

enter image description here

  1. Jeśli to nadal nie jest rozwiązany, aby uzyskać nazwę pakietu przez

    Context.getPackageName();

lub

Log.d(); 

W logcat sprawdzić nazwę pakietu aplikacji kolumny należy wymienić tam.

Powiązane problemy