2012-06-15 4 views
0

Я использую следующий код для загрузки изображения из приложения android в facebook. Я установил facebook sdk для Android. Но приложение не делает намеченного. Я получаю «неверный идентификатор приложения» в logcat. Какую ошибку я делаю?Недопустимый идентификатор приложения

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. 

EDIT: Это работало

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

Можете ли вы опубликовать весь точный текст из логарифма? – Zambotron

+0

@ Zambotron сделано –

ответ

1

UPDATE: Вот ссылка на класс Facebook.java на facebook апи эталонным сайте: http://developers.facebook.com/docs/reference/androidsdk/authentication/. Прокрутите несколько строк, чтобы найти способ авторизации. Вы уверены, что используете класс com.facebook.android.Facebook из андроида sdk, а не для класса, который, возможно, выкрутили самостоятельно?

Основной поток auth на приложения для Android выглядит следующим образом: 1. Сделайте экземпляр класса Facebook (который у вас есть). 2. Сделайте звонок в Facebook.authorize() с необходимыми разрешениями. 3. В обратном вызове DialogListener метода авторизации вы можете сохранить access_token и срок действия для будущего использования. 4. В действии, вызванном авторизацией, переопределите метод onActivityResult и, если этот метод вызывается с помощью кода результата Facebook (Facebook.DEFAULT_AUTH_ACTIVITY_CODE), затем вызовите Facebook.authorizeCallback с полученным намерением. 5. После этих 4 шагов , вы можете делать запросы api с графическим интерфейсом с помощью Facebook.request() или AsyncFacebookRunner.request(). В этих методах запроса первым параметром является нужный вам путь графа. Так, например, если вы вызвали метод запроса с дорожкой «me», вы получите информацию о профиле зарегистрированного пользователя. END UPDATE -------

Для начала, я думаю, вам обязательно нужно, чтобы траектория графика была первым параметром в ваш код в этой строке:

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

В моем коде это альбом/фотографии. Кроме того, вам необходимо получить разрешения от пользователя загрузить в принадлежащий ей альбом. Для этого вам нужно получить токен доступа, используя функцию Facebook.authorize().

Я не уверен, что я понимаю, почему вы получаете ошибку, связанную с неправильным идентификатором приложения, однако из того, что я знаю, это основные шаги, которые вам нужно предпринять, чтобы отправлять фотографии перед публикацией фотографий.

Я уверен, что кто-то скоро опубликует лучший ответ, надеюсь, что это поможет в то же время.

+0

facebook.authorize не получает разрешения в затмении. может у помочь –

+0

Я обновил свой ответ, однако, если facebook.authorize не разрешен, я подозреваю, что у вас либо есть старая (очень старая) версия sdk, либо у другого нет подходящего класса. Дайте мне знать, если вы найдете перерыв. – doles