2013-10-21 5 views
8

Ecco alcuni dettagli della mia app. Ho un layout di tabulazione utilizzando Fragments e un ViewPager. Nella terza scheda, ho un Google Map V2. Ora, ogni volta che l'utente dell'app si trova in un determinato punto di riferimento, può condividere i dettagli su quel punto di riferimento su Facebook. Ho creato con successo la mappa, ma i dettagli sui punti di riferimento devono ancora essere fatti. Ora sulla funzione "condividi" di facebook, ho seguito i passaggi su facebook developers. Quando eseguo l'applicazione, ottengo l'errore:Errore nell'ID applicazione dell'app Facebook in Manifest

10-17 14:19:06.856: E/AndroidRuntime(2180): java.lang.NullPointerException: Argument 'applicationId' cannot be null 

e dopo una ricerca, ho scoperto che ho bisogno di mettere l'ID applicazione sul manifest.xml.

Qui è la mia meta-dati:

<meta-data 
     android:name="com.google.android.maps.v2.API_KEY" 
     android:value="the key from google api console" 

     /> 
    <meta-data 
     android:name="com.facebook.sdk.ApplicationId" 
     android:value="the key from fb devs" 

     /> 

Tuttavia, ho ancora ottenere l'errore:

10-17 14:44:03.076: E/AndroidRuntime(2240): java.lang.NullPointerException: Argument 'applicationId' cannot be null 

la finestra intera facebook share si trova in una Fragment.

Eccolo:

TabFour.java

public class TabFour extends Fragment { 
private UiLifecycleHelper uiHelper; 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.activity_tab_four, container, false); 

    return rootView; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    uiHelper = new UiLifecycleHelper(getActivity(), callback); 
    uiHelper.onCreate(savedInstanceState); 

    OpenGraphAction action = GraphObject.Factory.create(OpenGraphAction.class); 
    action.setProperty("book", "https://example.com/book/Snow-Crash.html"); 

    @SuppressWarnings("deprecation") 
    FacebookDialog shareDialog = new FacebookDialog.OpenGraphActionDialogBuilder(getActivity(), action, "books.reads", "book") 
      .build(); 
    uiHelper.trackPendingDialogCall(shareDialog.present()); 
} 


@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    uiHelper.onActivityResult(requestCode, resultCode, data, new FacebookDialog.Callback() { 
     @Override 
     public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) { 
      Log.e("Activity", String.format("Error: %s", error.toString())); 
     } 

     @Override 
     public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) { 
      Log.i("Activity", "Success!"); 
     } 
    }); 
} 



@Override 
public void onResume() { 
    super.onResume(); 
    uiHelper.onResume(); 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    uiHelper.onSaveInstanceState(outState); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    uiHelper.onPause(); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    uiHelper.onDestroy(); 
} 
private Session.StatusCallback callback = new Session.StatusCallback() { 


    @Override 
    public void call(Session session, SessionState state, 
      Exception exception) { 
     // TODO Auto-generated method stub 

    } 
}; 

}

Ecco il mio logcat.

risposta

25

Non si può mettere l'appID direttamente nel manifestarsi, è necessario fare riferimento a una risorsa stringa nel manife st. Qualcosa di simile:

Nel vostro AndroidManifest:

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

Nella tua strings.xml

<resources> 
    ... 
    <string name="app_id">$app_id_here</string> 
</resources> 
2

Non dovrebbe in realtà essere:

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

nota il passaggio da android: value to android: resource.

+1

Vorrei sottolineare il commento di Steve. Mi hai salvato un ago in una pila di fieno di un problema, Steve. Grazie – kuruppsify

4

È importante tenere presente che è necessario incollare l'elemento meta-dati ENTRO I TAG APLICATION.

questo modo:

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:roundIcon="@mipmap/ic_launcher_round" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

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

Se si incolla da qualche altra parte, voi continuo a ricevere questo errore.

+2

Grazie è stato il mio errore, mi hai salvato la giornata! :) – luiswill

Problemi correlati