Anonimowy obiekt przesyłania plików do Imgur API (JSON) daje błąd uwierzytelniania 401
Stworzyłem klasęUploadToImgurTask
jako AsyncTask, który pobiera pojedynczy parametr ścieżki pliku, tworzy i ustawia MultiPartEntity, a następnie używa Apache HttpClient do przesłania obrazu ze wspomnianym obiektem. Odpowiedź JSON z Imgur jest zapisywana w obiekcie JSONObject, którego zawartość wyświetla się w LogCat dla własnego zrozumienia.
Oto zrzut ekranu JSON, który otrzymuję od Imgur:
Sprawdziłem status błędu 401 na api.imgur.com i mówi, że muszę uwierzytelnić się za pomocą OAuthpomimo fakt, że Imgur bardzo wyraźnie stwierdził, że aplikacje nie muszą korzystać z OAuth, jeśli obrazy są przesyłane anonimowo (co właśnie robię obecnie).
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;
}
}
Po tym, jak doInBackground zwraca link do przesłanego obrazu do onPostExecute, chcę skopiować go do schowka systemowego, ale Eclipse nadal mówi, że getSystemService (String) nie jest zdefiniowany w mojej klasie ASyncTask.
Nie ma legalnego sposobu na zwrócenie linku (String) z powrotem do głównego wątku, więc muszę zrobić wszystko, co mam zrobić w ramach onPostExecute w UploadToImgurTask (który rozszerza 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);
}
Co powoduje problem?