2012-08-23 55 views
5

我使用flickrj-android-2.0.0並遵循OAuth流程。我得到了訪問令牌和祕密,但當我嘗試上傳flickr上的照片時,我得到這個錯誤:Android:如何在flickr上使用flickrj-android-2.0.0上傳照片android庫

com.googlecode.flickrjandroid.FlickrException:99:權限不足。方法需要寫入權限;閱讀授權

甚至當我創建我的api-key和secret時,我改變了寫入權限,但仍然得到相同的錯誤。

對於上傳照片我使用下面的代碼請幫我解決這個問題我真的被困在這部分。

public void uploadPhoto(OAuth... params) 
      throws ParserConfigurationException { 
     OAuth oauth = params[0]; 
     OAuthToken token = oauth.getToken(); 
     RequestContext requestContext = RequestContext.getRequestContext(); 
     OAuth auth = new OAuth(); 
     auth.setToken(new OAuthToken(token.getOauthToken(), token 
       .getOauthTokenSecret())); 
     requestContext.setOAuth(auth); 
     Uploader up = new Uploader(FlickrHelper.API_KEY, FlickrHelper.API_SEC); 
     UploadMetaData uploadMetaData = new UploadMetaData(); 
     uploadMetaData.setTitle("hello world"); 
     try { 
      Drawable d = getResources().getDrawable(R.drawable.icon); 
      // the drawable (Captain Obvious, to the rescue!!!) 
      Bitmap bitmap = ((BitmapDrawable) d).getBitmap(); 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
      byte[] bitmapdata = stream.toByteArray(); 
      System.out.println("Bitmap value= " + bitmapdata); 
      userIcon.setImageBitmap(bitmap); 
      up.upload("Hello From Emulator", bitmapdata, uploadMetaData); 

     } catch (FlickrException e) { 

      e.printStackTrace(); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (SAXException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

謝謝...

+0

請參閱[本](http://www.java2s.com/Code/Android/Development/UploadImagetoFlickrwithJSON.htm)和[本示例](http://blog.theunical.com/java/flickr-example-to-上傳照片使用Java /)也。 – Praveenkumar

+0

正如我所提到的,我正在使用Oauth流量,請告訴我如何使用相同的流量。 – user1618714

+0

你有沒有解決?????? ..我面臨這個問題... –

回答

3

我已經改變OAuthTask級解決......問題是唯一的...... 把Permission.WRITE代替Permission.READ

public class OAuthTask extends AsyncTask<Void, Integer, String> { 

// private static final Logger logger = LoggerFactory 
// .getLogger(OAuthTask.class); 
private static final Uri OAUTH_CALLBACK_URI = Uri 
     .parse(FlickrjAndroidSampleActivity.CALLBACK_SCHEME + "://oauth"); //$NON-NLS-1$ 

/** 
* The context. 
*/ 
private Context mContext; 

/** 
* The progress dialog before going to the browser. 
*/ 
private ProgressDialog mProgressDialog; 

/** 
* Constructor. 
* 
* @param context 
*/ 
public OAuthTask(Context context) { 
    super(); 
    this.mContext = context; 
} 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    mProgressDialog = ProgressDialog.show(mContext, 
      "", "Generating the authorization request..."); //$NON-NLS-1$ //$NON-NLS-2$ 
    mProgressDialog.setCanceledOnTouchOutside(true); 
    mProgressDialog.setCancelable(true); 
    mProgressDialog.setOnCancelListener(new OnCancelListener() { 
     @Override 
     public void onCancel(DialogInterface dlg) { 
      OAuthTask.this.cancel(true); 
     } 
    }); 
} 

/* 
* (non-Javadoc) 
* 
* @see android.os.AsyncTask#doInBackground(Params[]) 
*/ 
@Override 
protected String doInBackground(Void... params) { 
    try { 
     Flickr f = FlickrHelper.getInstance().getFlickr(); 
     OAuthToken oauthToken = f.getOAuthInterface().getRequestToken(
       OAUTH_CALLBACK_URI.toString()); 
     saveTokenSecrent(oauthToken.getOauthTokenSecret()); 
     URL oauthUrl = f.getOAuthInterface().buildAuthenticationUrl(
       Permission.WRITE, oauthToken); 
     return oauthUrl.toString(); 
    } catch (Exception e) { 
     //   logger.error("Error to oauth", e); //$NON-NLS-1$ 
     return "error:" + e.getMessage(); //$NON-NLS-1$ 
    } 
} 

/** 
* Saves the oauth token secrent. 
* 
* @param tokenSecret 
*/ 
private void saveTokenSecrent(String tokenSecret) { 
    //  logger.debug("request token: " + tokenSecret); //$NON-NLS-1$ 
    FlickrjAndroidSampleActivity act = (FlickrjAndroidSampleActivity) mContext; 
    act.saveOAuthToken(null, null, null, tokenSecret); 
    //  logger.debug("oauth token secret saved: {}", tokenSecret); //$NON-NLS-1$ 
} 

@Override 
protected void onPostExecute(String result) { 
    if (mProgressDialog != null) { 
     mProgressDialog.dismiss(); 
    } 
    if (result != null && !result.startsWith("error")) { //$NON-NLS-1$ 
     mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri 
       .parse(result))); 
    } else { 
     Toast.makeText(mContext, result, Toast.LENGTH_LONG).show(); 
    } 
} 

} 

看到Full Demo

權限

enter image description here

+0

你試過了嗎通過更改權限? –

+0

先生,我搜索很多,但我沒有得到任何SDK flickr –

+0

你見過這個閃爍的API http://sourceforge.net/projects/flickrj/files/ –