2012-06-15 53 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

相關問題