При анонимной загрузке объекта File в Imgur API (JSON) выдается ошибка аутентификации 401
Я создал классUploadToImgurTask
как AsyncTask, который принимает один параметр пути к файлу, создает и устанавливает MultiPartEntity, а затем использует Apache HttpClient для загрузки изображения с указанной сущностью. Ответ JSON от Imgur сохраняется в JSONObject, содержимое которого я показываю в LogCat для собственного понимания.
Вот скриншот JSON, который я получаю от Imgur:
Я посмотрел ошибку 401 Статус на api.imgur.com, и он говорит, что мне нужно для проверки подлинности с использованием OAuthнесмотря на тот факт, что Imgur очень четко заявил, что приложениям не нужно использовать OAuth, если изображения загружаются анонимно (что я сейчас и делаю).
class UploadToImgurTask extends AsyncTask<String, Void, Boolean> {
String upload_to;
@Override
protected Boolean doInBackground(String... params) {
final String upload_to = "https://api.imgur.com/3/upload.json";
final String API_key = "API_KEY";
final String TAG = "Awais";
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpPost httpPost = new HttpPost(upload_to);
try {
final MultipartEntity entity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE);
entity.addPart("image", new FileBody(new File(params[0])));
entity.addPart("key", new StringBody(API_key));
httpPost.setEntity(entity);
final HttpResponse response = httpClient.execute(httpPost,
localContext);
final String response_string = EntityUtils.toString(response
.getEntity());
final JSONObject json = new JSONObject(response_string);
Log.d("JSON", json.toString()); //for my own understanding
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
После того, как doInBackground возвращает ссылку на загруженное изображение в onPostExecute, я хочу скопировать его в системный буфер обмена, но Eclipse продолжает говорить, что getSystemService (String) не определен в моем классе ASyncTask.
Не существует законного способа вернуть ссылку (строку) обратно в основной поток, поэтому я должен делать все, что должен, в onPostExecute внутри UploadToImgurTask (который расширяет ASyncTask)
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);
}
В чем причина проблемы?