2017-03-19 6 views
1

나는 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; 
     } 
    } 
} 

답변

0

"너무 많이 요청 함"은 사용자가 조절되었음을 나타냅니다. 가능한 이유는 요청을 너무 빠르게 보내고 있기 때문입니다. 즉각적인 해결책은 새로운 앱을 만드는 것이고, 더 느린 속도로 API를 호출하는 것입니다.