Note that there are some explanatory texts on larger screens.

plurals
  1. POFacebook SDK Image posting error
    text
    copied!<p>I'm having a bit of a problem, whenever I attempt to post images to facebook, an error that resembles the below screenshot always show.</p> <p>It works on emulator but not on device.</p> <p>I used the old and also tried the new facebook SDK (3.0) for android with no success.</p> <p><img src="https://i.stack.imgur.com/F9oYv.png" alt="Facebook error upon attempting to post image"></p> <p>Here's the class code of my facebookshare app</p> <pre><code>public class FacebookShare extends Activity { private String APP_ID, APP_SECRET, Name, Link, Description, Picture; private int fbTYPE; private Facebook facebook; private AsyncFacebookRunner mAsyncRunner; private Activity ctx; private Bitmap bitmap; SharedPreferences mPrefs; public FacebookShare(Activity ctx) { APP_ID = "...obfuscated..."; facebook = new Facebook(APP_ID); mAsyncRunner = new AsyncFacebookRunner(facebook); this.ctx = ctx; } public void shareFB(int TypeOfSharing) { APP_ID = "...obfuscated..."; facebook = new Facebook(APP_ID); mAsyncRunner = new AsyncFacebookRunner(facebook); this.fbTYPE = TypeOfSharing; loginToFacebook(); } public void loginToFacebook() { Log.v("debugging", "Entered Login to facebook"); String access_token = mPrefs.getString("access_token", ""); long expires = mPrefs.getLong("access_expires", 0); if (!access_token.equals("")) { facebook.setAccessToken(access_token); Log.v("Access Token", facebook.getAccessToken()); } if (expires != 0) { facebook.setAccessExpires(expires); } if (!facebook.isSessionValid()) { Log.v("debugging", "Session is Invalid"); facebook.authorize(ctx, new String[]{ "email","publish_stream" }, new DialogListener() { public void onCancel() { // Function to handle cancel event } public void onComplete(Bundle values) { // Function to handle complete event // Edit Preferences and update facebook acess_token SharedPreferences.Editor editor = mPrefs.edit(); editor.putString("access_token", facebook.getAccessToken()); editor.putLong("access_expires", facebook.getAccessExpires()); editor.commit(); if (fbTYPE == 1) { postToWall(); } else if (fbTYPE == 0) { postToWall(getBitmap()); } } public void onError(DialogError error) { Log.v("debugging", error.getMessage()); } public void onFacebookError(FacebookError fberror) { Log.v("debugging", fberror.getMessage()); } }); Log.v("debugging", "Passed from authorization"); } else { if (fbTYPE == 1) { Log.v("debugging", "Entered Post to facebook"); postToWall(); } else if (fbTYPE == 0) { Log.v("debugging", "Entered Post image to facebook"); postToWall(getBitmap()); } } } public void clearCredentials() { try { facebook.logout(ctx); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void postToWall() { // post on user's wall. Bundle params = new Bundle(); params.putString("description", getDescription()); params.putString("picture", getPicture()); params.putString("name", getName()); params.putString("link", getLink()); facebook.dialog(ctx, "feed", params, new DialogListener() { public void onFacebookError(FacebookError e) { e.printStackTrace(); Log.e("FBDEBUG", e.toString()); } public void onError(DialogError e) { e.printStackTrace(); Log.e("FBDEBUG", e.toString()); } public void onComplete(Bundle values) { Toast.makeText(ctx, "Thanks for sharing JOLENPOP", Toast.LENGTH_SHORT).show(); } public void onCancel() { // Login_Activity.asyncFBLogin fblogin = null; // fblogin.execute(); } }); } public void postToWall(Bitmap bmImage) { Log.v("debugging", "entered postToWall(bitmap)"); byte[] data = null; Bitmap bm = Bitmap.createBitmap(bmImage); ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(CompressFormat.JPEG, 100, baos); data = baos.toByteArray(); Bundle params = new Bundle(); params.putString("method", "post"); params.putString("message", getDescription()); params.putByteArray("image", data); try { String response = facebook.request("me"); response = facebook.request("me/photos", params, "POST"); if (response == null || response.equals("") || response.equals("false")) { Log.v("response String", response); return; } else if (response.toLowerCase().contains("error")) { Log.v("response String", response); return; } } catch (Exception e) { e.printStackTrace(); Log.e("FBDEBUG", e.toString()); return; } Toast.makeText(ctx, "Your photo has been successfuly published!", Toast.LENGTH_LONG).show(); } public void getProfileInformation() { mAsyncRunner.request("me", new RequestListener() { public void onComplete(String response, Object state) { Log.d("Profile", response); String json = response; try { JSONObject profile = new JSONObject(json); // getting name of the user String name = profile.getString("name"); // getting email of the user String email = profile.getString("email"); runOnUiThread(new Runnable() { public void run() { // Toast.makeText(getApplicationContext(), "Name: " + name // + "\nEmail: " + email, Toast.LENGTH_LONG).show(); } }); } catch (JSONException e) { e.printStackTrace(); } } public void onIOException(IOException e, Object state) { } public void onFileNotFoundException(FileNotFoundException e, Object state) { } public void onMalformedURLException(MalformedURLException e, Object state) { } public void onFacebookError(FacebookError e, Object state) { } }); } /** * setters * */ public void setFacebook(Facebook facebook) { this.facebook = facebook; } public void setAsyncRunner(AsyncFacebookRunner mAsyncRunner) { this.mAsyncRunner = mAsyncRunner; } public void setPrefs(SharedPreferences mPrefs) { this.mPrefs = mPrefs; } public void setName(String val) { this.Name = val; } public void setLink(String val) { this.Link = val; } public void setBitmap(Bitmap val) { this.bitmap = val; } public void setDescription(String val) { this.Description = val; } public void setPicture(String val) { this.Picture = val; } /** * getters * */ public String getAppID() { return this.APP_ID; } public String getName() { return this.Name; } public String getLink() { return this.Link; } public String getDescription() { return this.Description; } public String getPicture() { return this.Picture; } public Bitmap getBitmap() { return this.bitmap; } } </code></pre> <p>and here's how I used it:</p> <pre><code>fbShare = new FacebookShare(this); mPrefs = PreferenceManager.getDefaultSharedPreferences(this); Log.v("debugging", "entered post to image"); Bitmap screenshot = this.glSurfaceView.mRenderer.screenCapture; fbShare.setName("JOLENPOP"); fbShare.setDescription("I got a score of " + this.glSurfaceView.mRenderer.Score + " in JOLENPOP! Try to beat me!"); fbShare.setBitmap(screenshot); fbShare.setPrefs(mPrefs); fbShare.shareFB(0); </code></pre> <p>I tried the Built-in app and also facebook.FORCE_DIALOG_AUTH with no difference in their results.. Thanks in advance, and more power :)</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload