Objeto Anonymous Uploading File para Imgur API (JSON) dá erro de autenticação 401
Eu criei uma aulaUploadToImgurTask
como um AsyncTask que usa um único parâmetro de caminho de arquivo, cria e define um MultiPartEntity e, em seguida, usa o Apache HttpClient para carregar a imagem com essa entidade. A resposta JSON do Imgur é salva em um JSONObject, cujo conteúdo eu exibo no LogCat para meu próprio entendimento.
Aqui está uma captura de tela do JSON que recebo da Imgur:
Eu procurei o status de erro 401 em api.imgur.com e ele diz que preciso autenticar usando o OAuthapesar o fato de que a Imgur afirmou muito claramente que os aplicativos não precisam usar o OAuth se as imagens estiverem sendo carregadas anonimamente (que é o que estou fazendo agora).
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;
}
}
Depois que o doInBackground retorna o link para a imagem enviada para onPostExecute, eu quero copiá-lo para a área de transferência do sistema, mas o Eclipse continua dizendo que o getSystemService (String) não está definido dentro da minha classe ASyncTask.
Não há nenhuma maneira legítima de retornar o link (uma string) de volta ao thread principal, então eu tenho que fazer o que eu tenho que fazer dentro de onPostExecute dentro de UploadToImgurTask (que estende 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);
}
O que está causando o problema?