首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:如何使用flickrj-Androd-2.0.0 android库在flickr上上传照片

Android:如何使用flickrj-Androd-2.0.0 android库在flickr上上传照片
EN

Stack Overflow用户
提问于 2012-08-23 05:24:28
回答 1查看 2.5K关注 0票数 5

我使用flickrj-Androd-2.0.0并遵循OAuth流.我也得到了访问令牌和秘密,但是当我试图在flickr上上传照片时,我得到了这个错误:

com.googlecode.flickrjandroid.FlickrException: 99:权限不足。方法需要写入权限;读取授予的

即使在创建api时,我也更改了写入权限--密钥和机密,但仍然会出现相同的错误。

为了上传照片,我正在使用下面的代码,请帮助我解决这个问题,我真的困在这部分。

代码语言:javascript
复制
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();
        }
    }

谢谢..。

EN

回答 1

Stack Overflow用户

发布于 2012-09-21 04:51:37

我通过改变OAuthTask类来解决问题.问题是只有许可..。使用Permission.WRITE而不是Permission.READ

代码语言:javascript
复制
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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12085201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档