2017-09-07 5 views
0

Quand je tente d'écrire le code comme cette erreur se produit:comment puis-je faire asynctask lancer WriterException?

doInBackground (String ...) 'dans 'com .....' affrontements avec 'QrGenerator doInBackground (Params ...)' dans' Android .os.AsyncTask '; méthode surchargée ne jette pas 'com.google.zxing.WriterException'

Voici le code:

private class QrGenerator extends AsyncTask<String,Integer,Bitmap>{ 
    @Override 
    protected Bitmap doInBackground(String... strings) throws WriterException { 

    StringBuilder strBuilder = new StringBuilder(); 
    for (int i = 0; i < strings.length; i++) { 
     strBuilder.append(strings[i]); 
    } 
    String value = strBuilder.toString(); 

    BitMatrix bitMatrix; 
    try { 
     bitMatrix = new MultiFormatWriter().encode(
       value, 
       BarcodeFormat.DATA_MATRIX.QR_CODE, 
       QRcodeWidth, QRcodeWidth, null 
     ); 

    } catch (IllegalArgumentException Illegalargumentexception) { 

     return null; 
    } 
    int bitMatrixWidth = bitMatrix.getWidth(); 

    int bitMatrixHeight = bitMatrix.getHeight(); 

    int[] pixels = new int[bitMatrixWidth * bitMatrixHeight]; 

    for (int y = 0; y < bitMatrixHeight; y++) { 
     int offset = y * bitMatrixWidth; 

     for (int x = 0; x < bitMatrixWidth; x++) { 

      pixels[offset + x] = bitMatrix.get(x, y) ? 
        getResources().getColor(R.color.QRCodeBlackColor) : getResources().getColor(R.color.QRCodeWhiteColor); 
     } 
    } 
    Bitmap bitmap = Bitmap.createBitmap(bitMatrixWidth, bitMatrixHeight, Bitmap.Config.ARGB_4444); 

    bitmap.setPixels(pixels, 0, 500, 0, 0, bitMatrixWidth, bitMatrixHeight); 
    return bitmap; 
} 

    @Override 
    protected void onPostExecute(Bitmap bitmap) { 
     super.onPostExecute(bitmap); 
     imageView.setImageBitmap(bitmap); 
    } 
} 
+0

capture Essayez (Exception e) insted des prises (IllegalArgumentException IllegalArgumentException) –

+0

je reçois toujours la même erreur – shotofop

Répondre

0

Vous ne pouvez pas lancer des exceptions supplémentaires dans les méthodes outrepassée, comme doInBackground(...). Voir this link. Vous devez attraper l'exception dans votre méthode. J'ai modifié votre méthode pour également attraper l'exception WriterException.

try { 
    bitMatrix = new MultiFormatWriter().encode(
      value, 
      BarcodeFormat.DATA_MATRIX.QR_CODE, 
      33, 33, null 
    ); 

} catch (IllegalArgumentException | WriterException e1) { 
    e1.printStackTrace(); 
    return null; 
}