Android的:如何使用flickrj-的Andr​​oid 2.0.0安卓图书馆的flickr上传照片如何使用、上传照片、图书馆、flickrj

2023-09-06 03:18:45 作者:落日故人情

我的使用flickrj-的Andr​​oid 2.0.0,并按照OAuth的流量。我得到的访问令牌和秘密也是,但是当我尝试上传在Flickr上的照片我收到此错误:

I an using flickrj-android-2.0.0 and follow the OAuth flow. I am getting the access-token and secret also but when I try to upload the photo on flickr I am getting the this error:

com.google code.flickrjandroid.FlickrException:99:没有足够的权限。方法需要写权限;读授予

即使我已经改变了许可,当我创建我的API密钥和秘密,但仍然得到同样的错误来写。

Even I have changed the permission to write when I am creating my api-key and secret, but still getting the same error.

有关我公司采用以下code,请帮我解决了这一点,我真的卡在这部分,上传照片

For uploading photo I am using the below code please help me to solve this out I am really stuck at this part.

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();
        }
    }

谢谢...

Thanks...

推荐答案

我已经通过更改 OAuthTask 类解决......问题是只允许... 把 Permission.WRITE ,而不是 Permission.READ

I have solved by changing OAuthTask class... The problem was the permission only... Put Permission.WRITE instead of 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();
    }
}

}

看 展开演示

 
精彩推荐