Flickr以编程方式在Android中注销

时间:2014-02-20 11:51:15

标签: android cookies flickr

当图像上传到flickr时,我遇到了一些问题,誓言令牌以及用户凭据都存储在Web浏览器缓存中。因此我无法从中退出。所以当我去flickr时再次上传我的图片,它自动上传它而不是打开登录页面。现在当我清除所有默认的浏览器cookie时,它会要求登录页面。当我被重定向回到时,有任何其他方式可以自动注销它我的申请。任何形式的支持将不胜感激。 提前谢谢......

1 个答案:

答案 0 :(得分:0)

试试这里,这里....,FlickerHelper.java

    public final class FlickrHelper {

    private static FlickrHelper instance = null;
    private static final String API_KEY = ""; //$NON-NLS-1$
    public static final String API_SEC = ""; //$NON-NLS-1$
    private FlickrHelper() {
    }
    public static FlickrHelper getInstance() {
        if (instance == null) {
            instance = new FlickrHelper();
        }
        return instance;
    }
    public Flickr getFlickr() {
        try {
            Flickr f = new Flickr(API_KEY, API_SEC, new REST());
            return f;
        } catch (ParserConfigurationException e) {
            return null;
        }
    }
    public Flickr getFlickrAuthed(String token, String secret) {
        Flickr f = getFlickr();
        RequestContext requestContext = RequestContext.getRequestContext();
        OAuth auth = new OAuth();
        auth.setToken(new OAuthToken(token, secret));
        requestContext.setOAuth(auth);
        return f;
    }
    public InterestingnessInterface getInterestingInterface() {
        Flickr f = getFlickr();
        if (f != null) {
            return f.getInterestingnessInterface();
        } else {
            return null;
        }
    }
    public PhotosInterface getPhotosInterface() {
        Flickr f = getFlickr();
        if (f != null) {
            return f.getPhotosInterface();
        } else {
            return null;
        }
    }
  }

FlickerjActivity.java

       public class FlickrjActivity extends Activity {
    public static final String CALLBACK_SCHEME = "flickrj-android-sample-oauth"; //$NON-NLS-1$
    public static final String PREFS_NAME = "flickrj-android-sample-pref"; //$NON-NLS-1$
    public static final String KEY_OAUTH_TOKEN = "flickrj-android-oauthToken"; //$NON-NLS-1$
    public static final String KEY_TOKEN_SECRET = "flickrj-android-tokenSecret"; //$NON-NLS-1$
    public static final String KEY_USER_NAME = "flickrj-android-userName"; //$NON-NLS-1$
    public static final String KEY_USER_ID = "flickrj-android-userId"; //$NON-NLS-1$

    String path;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (getIntent().getExtras() != null) {

            if (getIntent().getExtras().containsKey("flickImagePath")) {

                path = getIntent().getStringExtra("flickImagePath");
            }

        }

        new Thread() {
            public void run() {
                h.post(init);
            };
        }.start();
    }

    Handler h = new Handler();
    Runnable init = new Runnable() {

        @Override
        public void run() {
            OAuth oauth = getOAuthToken();
            if (oauth == null || oauth.getUser() == null) {
                OAuthTask task = new OAuthTask(getContext());
                task.execute();
            } else {
                load(oauth);
            }
        }
    };

    private void load(OAuth oauth) {
        if (oauth != null) {

            UploadPhotoTask taskUpload = new UploadPhotoTask(this, new File(
                    path));
            taskUpload.setOnUploadDone(new UploadPhotoTask.onUploadDone() {

                @Override
                public void onComplete() {
                    finish();
                }
            });

            taskUpload.execute(oauth);
        }
    }
    @Override
    protected void onNewIntent(Intent intent) {
        setIntent(intent);
    }

    @Override
    public void onResume() {
        super.onResume();
        Intent intent = getIntent();
        String scheme = intent.getScheme();
        OAuth savedToken = getOAuthToken();

        if (CALLBACK_SCHEME.equals(scheme)
                && (savedToken == null || savedToken.getUser() == null)) {
            Uri uri = intent.getData();
            String query = uri.getQuery();
            String[] data = query.split("&"); //$NON-NLS-1$
            if (data != null && data.length == 2) {
                String oauthToken = data[0].substring(data[0].indexOf("=") + 1); //$NON-NLS-1$
                String oauthVerifier = data[1]
                        .substring(data[1].indexOf("=") + 1); //$NON-NLS-1$
                OAuth oauth = getOAuthToken();
                if (oauth != null && oauth.getToken() != null
                        && oauth.getToken().getOauthTokenSecret() != null) {
                    GetOAuthTokenTask task = new GetOAuthTokenTask(this);
                    task.execute(oauthToken, oauth.getToken()
                            .getOauthTokenSecret(), oauthVerifier);
                }
            }
        }

    }

    public void onOAuthDone(OAuth result) {
        if (result == null) {
            Toast.makeText(this, "Authorization failed", //$NON-NLS-1$
                    Toast.LENGTH_LONG).show();
        } else {
            User user = result.getUser();
            OAuthToken token = result.getToken();
            if (user == null || user.getId() == null || token == null
                    || token.getOauthToken() == null
                    || token.getOauthTokenSecret() == null) {
                Toast.makeText(this, "Authorization failed", //$NON-NLS-1$
                        Toast.LENGTH_LONG).show();
                return;
            }
            String message = String
                    .format(Locale.US,
                            "Authorization Succeed: user=%s, userId=%s, oauthToken=%s, tokenSecret=%s", //$NON-NLS-1$
                            user.getUsername(), user.getId(),
                            token.getOauthToken(), token.getOauthTokenSecret());
            Toast.makeText(this, message, Toast.LENGTH_LONG).show();
            saveOAuthToken(user.getUsername(), user.getId(),
                    token.getOauthToken(), token.getOauthTokenSecret());
            load(result);
        }
    }

    public OAuth getOAuthToken() {
        // Restore preferences
        SharedPreferences settings = getSharedPreferences(PREFS_NAME,
                Context.MODE_PRIVATE);
        String oauthTokenString = settings.getString(KEY_OAUTH_TOKEN, null);
        String tokenSecret = settings.getString(KEY_TOKEN_SECRET, null);
        if (oauthTokenString == null && tokenSecret == null) {
            //          logger.warn("No oauth token retrieved"); //$NON-NLS-1$
            return null;
        }
        OAuth oauth = new OAuth();
        String userName = settings.getString(KEY_USER_NAME, null);
        String userId = settings.getString(KEY_USER_ID, null);
        if (userId != null) {
            User user = new User();
            user.setUsername(userName);
            user.setId(userId);
            oauth.setUser(user);
        }
        OAuthToken oauthToken = new OAuthToken();
        oauth.setToken(oauthToken);
        oauthToken.setOauthToken(oauthTokenString);
        oauthToken.setOauthTokenSecret(tokenSecret);
        return oauth;
    }

    public void saveOAuthToken(String userName, String userId, String token,
            String tokenSecret) {
        SharedPreferences sp = getSharedPreferences(PREFS_NAME,
                Context.MODE_PRIVATE);
        Editor editor = sp.edit();
        editor.putString(KEY_OAUTH_TOKEN, token);
        editor.putString(KEY_TOKEN_SECRET, tokenSecret);
        editor.putString(KEY_USER_NAME, userName);
        editor.putString(KEY_USER_ID, userId);
        editor.commit();
    }

    private Context getContext() {
        return this;

    }
   }

GetAouthToken.java

   public class GetOAuthTokenTask extends AsyncTask<String, Integer, OAuth> {

    private FlickrjActivity activity;

    public GetOAuthTokenTask(FlickrjActivity context) {
        this.activity = context;
    }
    @Override
    protected OAuth doInBackground(String... params) {
        String oauthToken = params[0];
        String oauthTokenSecret = params[1];
        String verifier = params[2];

        Flickr f = FlickrHelper.getInstance().getFlickr();
        OAuthInterface oauthApi = f.getOAuthInterface();
        try {
            return oauthApi.getAccessToken(oauthToken, oauthTokenSecret,
                    verifier);
        } catch (Exception e) {
            return null;
        }
    }
    @Override
    protected void onPostExecute(OAuth result) {
        if (activity != null) {
            activity.onOAuthDone(result);
        }
    }

    }

Oauthtask.java

      public class OAuthTask extends AsyncTask<Void, Integer, String> {
    private static final Uri OAUTH_CALLBACK_URI = Uri
            .parse(FlickrjActivity.CALLBACK_SCHEME + "://oauth"); //$NON-NLS-1$
    private Context mContext;
    private ProgressDialog mProgressDialog;
    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);
            }
        });
    }
    @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) {
            return "error:" + e.getMessage(); //$NON-NLS-1$
        }
    }
    private void saveTokenSecrent(String tokenSecret) {
        FlickrjActivity act = (FlickrjActivity) mContext;
        act.saveOAuthToken(null, null, null, tokenSecret);
    }
    @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();
        }
    }
}

uploadphototask.java

    public class UploadPhotoTask extends AsyncTask<OAuth, Void, String> {
    private final FlickrjActivity flickrjAndroidSampleActivity;
    private File file;
    public UploadPhotoTask(FlickrjActivity flickrjAndroidSampleActivity,
            File file) {
        this.flickrjAndroidSampleActivity = flickrjAndroidSampleActivity;
        this.file = file;
    }
    private ProgressDialog mProgressDialog;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mProgressDialog = ProgressDialog.show(flickrjAndroidSampleActivity,
                "", "Uploading..."); //$NON-NLS-1$ //$NON-NLS-2$
        mProgressDialog.setCanceledOnTouchOutside(true);
        mProgressDialog.setCancelable(true);
        mProgressDialog.setOnCancelListener(new OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dlg) {
                UploadPhotoTask.this.cancel(true);
            }
        });
    }
    @Override
    protected String doInBackground(OAuth... params) {
        OAuth oauth = params[0];
        OAuthToken token = oauth.getToken();

        try {
            Flickr f = FlickrHelper.getInstance().getFlickrAuthed(
                    token.getOauthToken(), token.getOauthTokenSecret());

            UploadMetaData uploadMetaData = new UploadMetaData();
            uploadMetaData.setTitle("" + file.getName());
            return f.getUploader().upload(file.getName(),
                    new FileInputStream(file), uploadMetaData);
        } catch (Exception e) {
            Log.e("boom!!", "" + e.toString());
            e.printStackTrace();
        }
        return null;
    }
    @Override
    protected void onPostExecute(String response) {
        if (mProgressDialog != null) {
            mProgressDialog.dismiss();
        }

        if (response != null) {
            Log.e("", "" + response);
        } else {

        }

        if (monUploadDone != null) {
            monUploadDone.onComplete();
        }

        Toast.makeText(flickrjAndroidSampleActivity.getApplicationContext(),
                response, Toast.LENGTH_SHORT).show();

    }

    onUploadDone monUploadDone;

    public void setOnUploadDone(onUploadDone monUploadDone) {
        this.monUploadDone = monUploadDone;
    }

    public interface onUploadDone {
        void onComplete();
    }

}

mainactivty.java

public class MainActivity extends Activity {
File fileUri;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button btnFlickr = (Button) findViewById(R.id.btnFlickr);
    btnFlickr.setOnClickListener(mFlickrClickListener);
    Button btnPick = (Button) findViewById(R.id.btnPick);
    btnPick.setOnClickListener(mPickClickListener);
}
View.OnClickListener mPickClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
        startActivityForResult(intent, 102);
    }
};
View.OnClickListener mFlickrClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (fileUri == null) {
            Toast.makeText(getApplicationContext(), "Please pick photo",
                    Toast.LENGTH_SHORT).show();
            return;
        }
        Intent intent = new Intent(getApplicationContext(),
                FlickrjActivity.class);
        intent.putExtra("flickImagePath", fileUri.getAbsolutePath());
        startActivity(intent);
    }
};
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 102) {
        if (resultCode == Activity.RESULT_OK) {
            Uri tmp_fileUri = data.getData();
            ((ImageView) findViewById(R.id.imageView1))
            .setImageURI(tmp_fileUri);
            String selectedImagePath = getPath(tmp_fileUri);
            fileUri = new File(selectedImagePath);
            Debug.e("", "fileUri : " + fileUri.getAbsolutePath());
        }

    }
};
public String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    @SuppressWarnings("deprecation")
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}
}

usercard.java

public class UserCard {
public String name;
public String url;
public int upVotes;
public int downVotes;
  }

debug.java

     public class Debug {
    private static final boolean DEBUG = true;
    public static void e(String tag, String msg) {
        if (DEBUG) {
            Log.e(tag, msg);
        }
    }public static void i(String tag, String msg) {
        if (DEBUG) {
            Log.i(tag, msg);
        }
    }
    public static void w(String tag, String msg) {
        if (DEBUG) {
            Log.w(tag, msg);
        }
    }
    public static void d(String tag, String msg) {
        if (DEBUG) {
            Log.d(tag, msg);
        }
    }
}