【发布时间】:2016-12-22 20:59:27
【问题描述】:
我目前正在尝试使用 Blogger API 在 Android 中获取用户博客列表,具体而言,当前用户的博客。我使用本教程 Authorizing Google for REST APIs 中的方法将 OAuth2 令牌与登录的帐户相关联。
Blogger API 文档说我可以使用https://www.googleapis.com/blogger/v3/users/userId/blogs 请求获取列表
,并且如果提供 OAuth2 令牌作为授权标头,我可以将 userID 替换为 self,如下所述:
获取https://www.googleapis.com/blogger/v3/users/self/blogs
授权:/* 此处为 OAuth 2.0 令牌 */
所以我使用 Volley 创建了一个JsonObjectRequest:
String url = "https://www.googleapis.com/blogger/v3/users/self/blogs";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
tv.setText("Response is: " + response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Authorization", mToken);
return headers;
}
};
MySingleton.getInstance(this).addToRequestQueue(jsonObjectRequest);
MySingleton 类是从Setting Up a Request Queue 复制而来的:
public class MySingleton {
private static MySingleton mInstance;
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private static Context mCtx;
private MySingleton(Context context) {
mCtx = context;
mRequestQueue = getRequestQueue();
mImageLoader = new ImageLoader(mRequestQueue,
new ImageLoader.ImageCache() {
private final LruCache<String, Bitmap>
cache = new LruCache<String, Bitmap>(20);
@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}
});
}
public static synchronized MySingleton getInstance(Context context) {
if (mInstance == null) {
mInstance = new MySingleton(context);
}
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
// getApplicationContext() is key, it keeps you from leaking the
// Activity or BroadcastReceiver if someone passes one in.
mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
}
return mRequestQueue;
}
public <T> void addToRequestQueue(Request<T> req) {
getRequestQueue().add(req);
}
public ImageLoader getImageLoader() {
return mImageLoader;
}
}
执行此代码后,它给了我一个 401 错误,说我没有登录。我做错了什么?
【问题讨论】:
标签: java android rest google-api blogger