2012-06-15 51 views
0

我正在使用以下代码从Android应用程序加载到Facebook的图像。我已经为android安装了facebook sdk。但该应用程序没有做到预期的。我在logcat中收到“无效的应用程序ID”。我犯了什么错误?无效的应用程序ID

Button mButton=(Button)findViewById(R.id.button); 

mButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Facebook mFacebook=new Facebook(yourAppID) 

    byte[] data = null; 
    Bitmap bi = BitmapFactory.decodeFile(imageLink); 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bi.compress(Bitmap.CompressFormat.PNG, 100, baos); 
    data = baos.toByteArray(); 

    Bundle params = new Bundle(); 
    params.putString("method", "photos.upload"); 
    params.putByteArray("picture", data); 

    AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(mFacebook); 
    mAsyncRunner.request(null, params, "POST", 
      new SampleUploadListener(), null); 
     } 
    }); 







public class SampleUploadListener extends BaseRequestListener { 

    @SuppressWarnings("unused") 
    public void onComplete(final String response, final Object state) { 
     try { 
      Log.d("Facebook-Example", "Response: " + response.toString()); 
      JSONObject json = Util.parseJson(response); 
      String src = json.getString("src"); 

      PublishImage.this.runOnUiThread(new Runnable() { 
       public void run() { 
        Toast.makeText(getApplicationContext(), 
          "Successfully Uploaded", Toast.LENGTH_SHORT) 
          .show(); 
       } 
      }); 
     } catch (JSONException e) { 
      Log.w("Facebook-Example", "JSON Error in response"); 
     } catch (FacebookError e) { 
      Log.w("Facebook-Example", "Facebook Error: " + e.getMessage()); 
     } 
    } 
} 

public abstract class BaseRequestListener implements RequestListener { 

    public void onFacebookError(FacebookError e, final Object state) { 
     Log.e("Facebook", e.getMessage()); 
     e.printStackTrace(); 
    } 

    public void onFileNotFoundException(FileNotFoundException e, 
      final Object state) { 
     Log.e("Facebook", e.getMessage()); 
     e.printStackTrace(); 
    } 

    public void onIOException(IOException e, final Object state) { 
     Log.e("Facebook", e.getMessage()); 
     e.printStackTrace(); 
    } 

    public void onMalformedURLException(MalformedURLException e, 
      final Object state) { 
     Log.e("Facebook", e.getMessage()); 
     e.printStackTrace(); 
    } 

} 

logcat的

06-15 20:00:55.398: W/KeyCharacterMap(629): No keyboard for id 0 
06-15 20:00:55.398: W/KeyCharacterMap(629): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
06-15 20:01:02.438: D/dalvikvm(629): GC_EXTERNAL_ALLOC freed 1214K, 59% free 2755K/6599K, external 1995K/2266K, paused 630ms 
06-15 20:01:08.998: D/MediaPlayer(629): getMetadata 
06-15 20:01:15.529: D/Facebook-Example(629): Response: {"error_code":101,"error_msg":"Invalid application ID.","request_args":[{"key":"method","value":"photos.upload"},{"key":"format","value":"json"}]} 
06-15 20:01:15.529: W/Facebook-Example(629): Facebook Error: Invalid application ID. 

编辑:这个工作

class ButtonListener1 implements View.OnClickListener{ 

    Facebook facebook=new Facebook(ID); 

    @Override 
    public void onClick(View v) { 

     facebook.authorize(Pic.this, new String[] { "publish_stream" }, 
       new DialogListener() { 

      @Override 
      public void onFacebookError(FacebookError e) { 
      // TODO Auto-generated method stub 
      } 

      @Override 
      public void onError(DialogError dialogError) { 
      // TODO Auto-generated method stub 
      } 

      @Override 
      public void onComplete(Bundle values) { 
       postToWall(values.getString(Facebook.TOKEN));            
      } 

      private void postToWall(String accessToken) {  


       ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
       bmp.compress(Bitmap.CompressFormat.PNG, 100, baos); 
       byte[] data = baos.toByteArray(); 
       Bundle bundle = new Bundle(); 

       bundle.putString(Facebook.TOKEN, accessToken); 
       bundle.putByteArray("facebookPictureData", data); 
       // The byte array is the data of a picture. 
       bundle.putByteArray("picture", getIntent().getExtras().getByteArray("data")); 

       try { 
        facebook.request("me/photos", bundle, "POST"); 

       } catch (FileNotFoundException fileNotFoundException) { 
        // makeToast(fileNotFoundException.getMessage()); 
       } catch (MalformedURLException malformedURLException) { 
        // makeToast(malformedURLException.getMessage()); 
       } catch (IOException ioException) { 
        // makeToast(ioException.getMessage()); 
       } 
      } 


      @Override 
      public void onCancel() { 
      // TODO Auto-generated method stub 
      } 
     }); 



    } 
} 
+0

你可以发布logcat的所有确切文本吗? – Zambotron

+0

@ Zambotron完成 –

回答

1

UPDATE: 这里是链接到Facebook.java类的Facebook API参考网站: http://developers.facebook.com/docs/reference/androidsdk/authentication/。向下滚动几行即可找到授权方法。你确定你正在使用android sdk中的com.facebook.android.Facebook类,而不是你自己可能旋转过的类吗?

Android应用程序的基本认证流程如下: 1.制作一个Facebook类(您有)的实例。 2.使用您需要的正确权限拨打Facebook.authorize()。 3.在授权方法的DialogListener回调中,您可以保存access_token和过期时间以备将来使用。 4.在您调用授权的活动中,重写“onActivityResult方法,并且如果使用Facebook的结果代码调用该方法(Facebook.DEFAULT_AUTH_ACTIVITY_CODE),则用所接收的意图调用Facebook.authorizeCallback。 5.经过这4个步骤你可以自由地使用Facebook.request()或AsyncFacebookRunner.request()来创建图形api请求,在这些请求方法中,第一个参数是你想要的图形路径,例如,如果你调用了request方法如果路径为“我”,您将获得已登录用户的个人资料信息。 END UPDATE -------

对于初学者,我认为您一定需要将图形路径作为第一个参数您的代码在这条线上:

mAsyncRunner.request("*********7618/photos", params, "POST", 
new SampleUploadListener(), null); 
} 
}); 

在我的代码中是albumid/photos。此外,您需要用户的权限才能上传到属于她的相册。为此,您需要使用Facebook.authorize()来检索访问令牌。

我不确定我明白为什么你会得到有关应用程序ID无效的错误,但是,从我所知道的这是在发布照片之前需要做的以便发布照片的基本步骤。

我相信有人会很快发布一个更好的答案,希望这有助于在此期间。

+0

facebook.authorize在eclipse中没有得到解决。你可以帮助 –

+0

我更新了我的答案,但是,如果facebook.authorize没有解决,我怀疑你要么有一些较老的版本的sdk,要么没有合适的类。让我知道你是否找到了休息时间。 – doles

相关问题