Android : Android Facebook SDK Post Photo on Wall error

on Tuesday, October 28, 2014


Getting this error when trying to post image on wall with //uiHelper.onCreate(savedInstanceState); commented



E/Activity﹕ Error: com.facebook.FacebookException: Expected non-null 'com.facebook.platform.extra.APPLICATION_ID' extra, actual value was null.


If i uncomment this row //uiHelper.onCreate(savedInstanceState); my app crash when starting and i get this errors:



Caused by: java.lang.NullPointerException: Argument 'applicationId' cannot be null
at com.facebook.internal.Validate.notNull(Validate.java:29)
at com.facebook.Session.<init>(Session.java:323)
at com.facebook.Session.<init>(Session.java:306)
at com.facebook.UiLifecycleHelper.onCreate(UiLifecycleHelper.java:92)
at com.example.my.MyActivity.onCreate(MyActivity.java:78)


App code:



@SuppressWarnings("deprecation")
public class MyActivity extends Activity {
public static final String APP_ID = "xxxxxx";
private static final String[] PERMISSIONS = new String[]{
"publish_stream", "read_stream", "offline_access","user_friends", "read_friendlists",
"user_birthday", "user_likes", "manage_notifications"};
private static final int SELECTED_PICTURE=1;
private TextView mText;
private Handler mHandler = new Handler();
private ProgressDialog mSpinner;
private final ArrayList<Friend> friends = new ArrayList<Friend>();
private FriendsArrayAdapter friendsArrayAdapter;
private ListView listView;
private Facebook mFacebook;
private AsyncFacebookRunner mAsyncRunner;
public Bitmap bitmap;
private UiLifecycleHelper uiHelper;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
uiHelper = new UiLifecycleHelper(MyActivity.this, null);
//uiHelper.onCreate(savedInstanceState); //crash
setContentView(R.layout.activity_my);
mText = (TextView) MyActivity.this.findViewById(R.id.txt);
listView = (ListView) findViewById(R.id.friendsview);
friendsArrayAdapter = new FriendsArrayAdapter(this, R.layout.rowlayout, friends);
listView.setAdapter(friendsArrayAdapter);

// Define a spinner used when loading the friends over the network
mSpinner = new ProgressDialog(listView.getContext());
mSpinner.requestWindowFeature(Window.FEATURE_NO_TITLE);
mSpinner.setMessage("Loading...");

mFacebook = new Facebook(APP_ID);
mAsyncRunner = new AsyncFacebookRunner(mFacebook);
}

@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!");
}
});
mFacebook.authorizeCallback(requestCode, resultCode, data);
switch (requestCode){
case SELECTED_PICTURE:
if(resultCode == RESULT_OK)
{
Uri uri = data.getData();
String[]projection={MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(projection[0]);
String filePath=cursor.getString(columnIndex);
cursor.close();
bitmap = BitmapFactory.decodeFile(filePath);
PostImageOnWall(bitmap);
}
break;
}

}

public void PostImageOnWall(Bitmap bitmap)
{
OpenGraphAction action = GraphObject.Factory.create(OpenGraphAction.class);

List<Bitmap> images = new ArrayList<Bitmap>();
images.add(bitmap);

FacebookDialog shareDialog = new FacebookDialog.OpenGraphActionDialogBuilder(MyActivity.this, action, "cooking-app:cook", "meal")
.setImageAttachmentsForAction(images, true)
.build();
uiHelper.trackPendingDialogCall(shareDialog.present());
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

MenuItem loginItem = menu.findItem(R.id.login);
MenuItem postItem = menu.findItem(R.id.wallpost);
MenuItem checknotifications = menu.findItem(R.id.check);
MenuItem getfriends = menu.findItem(R.id.getfriends);
if (mFacebook.isSessionValid()) {
loginItem.setTitle("Logout");
postItem.setEnabled(true);
getfriends.setEnabled(true);
checknotifications.setEnabled(true);

} else {
loginItem.setTitle("Login");
postItem.setEnabled(false);
getfriends.setEnabled(false);
checknotifications.setEnabled(false);
}
loginItem.setEnabled(true);
return super.onPrepareOptionsMenu(menu);
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {

case R.id.login:
if (mFacebook.isSessionValid()) {
AsyncFacebookRunner asyncRunner = new AsyncFacebookRunner(
mFacebook);
asyncRunner.logout(this.getBaseContext(),
new LogoutRequestListener());
} else mFacebook.authorize(this, PERMISSIONS, new LoginDialogListener());
break;
case R.id.getfriends:
mSpinner.show();
mAsyncRunner.request("me/taggable_friends", new FriendsRequestListener());
break;
case R.id.wallpost:
Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, SELECTED_PICTURE);
break;
case R.id.check:
mSpinner.show();
Bundle params = new Bundle();
params.putString("acces_token", mFacebook.getAccessToken());
params.putString("include_read", "false");
AsyncFacebookRunner asyncRunner = new AsyncFacebookRunner(mFacebook);
asyncRunner.request("me/notifications", params, new CheckNotificationsListener());

break;

default:
return false;
}
return true;
}
@Override
protected void onResume() {
super.onResume();
uiHelper.onResume();
}

@Override
protected 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();
}
}


AndroidManifest



<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="xxxhiddenxxx"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<activity android:name="com.facebook.LoginActivity" ></activity>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MyActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<provider android:authorities="com.facebook.app.NativeAppCallContentProviderxxxhiddenxxx"
android:name="com.facebook.NativeAppCallContentProvider" />
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="xxxhidden"/>

0 comments:

Post a Comment