2012-01-11 2 views
1

facebook sdk를 사용하여 벽에 사진을 찍는 데 문제가 있습니다. 아래는 제 코드입니다. 활동의 시작에Android-facebook sdk를 사용하여 벽에 그림을 게시 할 수 없습니다

페이스 북의 권한 대화 : 피드

public void onClick(View v){ 
if(v==post_to_wall){ 
Toast.makeText(getApplicationContext(), "fb token " + token, Toast.LENGTH_LONG).show(); 
final Handler handler = new Handler(){ 
     public void handleMessage(Message what){ 
      finish(); 
     } 
    }; 
    Thread thread = new Thread(){ 
     public void run(){ 
      publishToFriendsWall(friends_id); 
      handler.sendEmptyMessage(0); 
     } 
    }; 
    thread.start();    
    } 
} 

벽 버튼의 클릭에 보내

fb = new Facebook(fb_id); 

fb.authorize(this, new String[] { "publish_stream", 
       "read_stream", "offline_access","read_friendlists"}, new DialogListener(){ 

public void onComplete(Bundle values) { 
    Log.e("oncomplete","value"); 
    if (values.isEmpty()) { 
     Log.e("oncomplete","value is empty"); 
     return; 
    } 
    if (!values.containsKey("POST")) { 
     token = fb.getAccessToken(); 
    } 
} 
public void onFacebookError(FacebookError e) {} 
public void onError(DialogError e){}  
public void onCancel() {} 
}); 

문제가 될 때입니다

public void publishToFriendsWall(String friends_id){ 
     if(fb.isSessionValid()){ 
     try{         
      Bundle params = new Bundle(); 
      params.putString(Facebook.TOKEN, token); 
       params.putString("message", edittext.getText().toString()); 
       params.putString("link", "http://www.mysite.com"); 
      params.putString("caption", "my caption"); 
      params.putString("description", "description of my link. Click the link to find out more."); 
      params.putString("name", "my name"); 
      //params.putString("picture", "mypic url"); 

      fb.request(((friends_id == null) ? "me" : friends_id) + "/feed", params, "POST"); 
     }catch(Exception e){ 
      Log.d(null, "Fb post to wall error occured " + e.getClass().getName()); 
     }    
    } 
    } 

친구 벽 방법에 게시 나는 다음 코드를 넣는다.

params.putString("picture", "mypic url"); 

거기에 아무 것도 게시되지 않았고 내가 위의 코드에 댓글을 달았다면 정상적으로 작동합니다. 그림을 게시하려면 페이스 북 그래프 API 문서를 읽고 사진에 필요한 액세스 토큰과 유효한 URL이 있어야합니다. 나는 액세스 토큰을 얻고 url이 유효하다는 것으로 모든 것을 끝냈다. 내 코드에 어떤 문제가 있습니까? 또한 아무런 오류도 발견되지 않았습니다. 내가 로그 캣에서 얻을 수있는 유일한 방법은

Key picture expected byte[] but value was a java.lang.String. the default value <null> was return 
Attempt to cast generated internal exception: 
java.lang.ClassCastException: java.lang.String 
    at android.os.Bundle.getByteArray(Bundle.java:1305) 
    at com.facebook.android.Util.encodePostBody(Util.java:63) 
    at com.facebook.android.Util.openUrl(Util.java:182) 
    at com.facebook.android.Facebook.request(Facebook.java:563) 

같은
+0

실제로 그림이 바이트 유형이어야하지만, 거기에 문자열을 사용하려고합니까? –

+0

예. 문자열이지만 URL 유형입니다. 웹상의 예제 대부분이 그림에 대한 URL을 넣기 때문입니다. http://developers.facebook.com/docs/reference/api/post/의 그래프 경로 api 문서에도 올바른 문자열 URL이 필요하다고 나와 있습니다. – Zahary

답변

0
mFacebook.setAccessToken(access_token); 
    boolean validity=mFacebook.isSessionValid(); 

    try 
    { 
    byte[] data = null; 

    BitmapFactory.Options opts = new BitmapFactory.Options(); 

    opts.inSampleSize=4;   
    Bitmap bi = BitmapFactory.decodeFile(st_imagepath,opts); 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bi.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
    data = baos.toByteArray(); 


     Bundle params = new Bundle(); 
     params.putString(Facebook.TOKEN, mFacebook.getAccessToken()); 
     params.putString("method", "photos.upload"); 
     params.putString("caption", caption); 



     params.putByteArray("picture", data); 

     AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(mFacebook); 

     mAsyncRunner.request(null, params, "POST", new SampleUploadListener(), null); 

사용이 작업 코드를 경고한다. 우르 문제는 해결 될 것입니다

관련 문제