El objeto de carga anónima de archivos a la API de Imgur (JSON) genera un error de autenticación 401
He creado una claseUploadToImgurTask
como una AsyncTask que toma un único parámetro de ruta de archivo, crea y establece una Entidad MultiPart, y luego usa Apache HttpClient para cargar la imagen con dicha entidad. La respuesta JSON de Imgur se guarda en un objeto JSON, cuyo contenido muestro en LogCat para mi propia comprensión.
Aquí hay una captura de pantalla del JSON que recibo de Imgur:
Busqué el error Estado 401 en api.imgur.com y dice que necesito autenticar usando OAuthA pesar de el hecho de que Imgur haya declarado claramente que las aplicaciones no necesitan usar OAuth si las imágenes se están cargando de forma anónima (que es lo que estoy haciendo ahora).
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;
}
}
Después de que doInBackground devuelva el enlace a la imagen cargada a onPostExecute, quiero copiarlo al portapapeles del sistema, pero Eclipse sigue diciendo que getSystemService (String) no está definido dentro de mi clase ASyncTask.
No hay una forma legítima de devolver el enlace (una cadena) al hilo principal, así que tengo que hacer lo que tenga que hacer dentro de onPostExecute dentro de UploadToImgurTask (que se extiende a 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);
}
¿Qué está causando el problema?