나는 Android를 처음 사용하고 있으며 제작하는 애플리케이션에 네트워킹 문제가있는 것으로 알고 있습니다. AsyncTask가 doInBackground
인 Android (return client.recognize(new RecognitionRequest(jpeg)).get(0);
)에 요청할 때.Android Clarifai API com.clarifai.api.exception.ClarifaiThrottledException : 너무 많은 요청
com.clarifai.api.exception.ClarifaiThrottledException: TOO MANY REQUESTS.
나는 내가 doInBackground
에서 client.recognize(new RecognitionRequest(jpeg)).get(0);
를 호출하고 있기 때문에 가정하지만 난 AsyncTask를 밖으로 이동할 때 그것은 나에게 "MainThread에 너무 많은 일을"제공 : 그러나, 나는 오류를 얻고있다.
이 문제를 해결하는 방법과 도움이 될만한지 잘 모르겠습니다. 감사!
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
Uri selectedImageUri = getImageUri(getApplicationContext(), photo);
String selectedImagePath = getPath(selectedImageUri);
String[] tags = new String[10];
RecognitionResult result = null;
try {
result = new ClarifaiTask().execute(photo).get();
} catch (ExecutionException ex) {
} catch (InterruptedException ex) {
}
;
if (result != null) {
if (result.getStatusCode() == RecognitionResult.StatusCode.OK) {
// Display the list of tags in the UI.
StringBuilder b = new StringBuilder();
int count = 0;
for (Tag tag : result.getTags()) {
if (count >= 10){
break;
}
tags[count++] = tag.getName();
System.out.println("TAG " + tag.getName());
}
}
}
}
}
private class ClarifaiTask extends AsyncTask<Bitmap, Void, RecognitionResult> {
@Override
protected RecognitionResult doInBackground(Bitmap... bitmaps) {
try {
// Scale down the image. This step is optional. However, sending large images over the
// network is slow and does not significantly improve recognition performance.
Bitmap scaled = Bitmap.createScaledBitmap(bitmaps[0], 320,
320 * bitmaps[0].getHeight()/bitmaps[0].getWidth(), true);
// Compress the image as a JPEG.
ByteArrayOutputStream out = new ByteArrayOutputStream();
scaled.compress(Bitmap.CompressFormat.JPEG, 90, out);
byte[] jpeg = out.toByteArray();
// Send the JPEG to Clarifai and return the result.
return client.recognize(new RecognitionRequest(jpeg)).get(0);
} catch (ClarifaiException e) {
Log.e(TAG, "Clarifai error", e);
return null;
}
}
}