2015-02-16 2 views
1

hi Я новичок в программировании на Android и создаю приложение, которое его часть генерирует Qrcode с помощью библиотеки Zxing Создал класс с помощью метода Encode содержит блок кода, который генерирует QRcodeЗапуск кода из другого класса

public void Encode(String Text_To_Encode) 
{ 
    final ImageView imageView = (ImageView) findViewById(R.id.QrImageView); 
    String qrData = "Ahmed"; 
    int qrCodeDimention = 500; 

    QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(qrData, null, 
      Contents.Type.TEXT, BarcodeFormat.QR_CODE.toString(), qrCodeDimention); 

    try { 
     Bitmap bitmap = qrCodeEncoder.encodeAsBitmap(); 

    imageView.setImageBitmap(bitmap); 
    } catch (WriterException e) { 
     e.printStackTrace(); 
    } 

} 

Всякий раз, когда я называю этот метод OnCreate() метод в MainActivity приложение к сожалению прекратило
, но когда я беру этот блок кода и запустить его прямо в MainActivity он прекрасно работает мне нужно знать что я делаю неправильно ....

ответ

0

от нормального контекста использования класса активности для доступа просмотров:

public void Encode(String Text_To_Encode,Activity activity) 
{ 
    final ImageView imageView = 
          (ImageView)activity.findViewById(R.id.QrImageView); 
    ..... 
} 

От вызова активности Encode метода пропускания контекста активности:

Encode(Text_To_Encode,ActivityName.this) 
+0

Спасибо за переигрывая. , , , и передать Mainactivity.this, когда я это называю ?? –

+0

@AhmedLabib: да см. Мой ответ –

+0

спасибо @ ρяσѕρєя K, он отлично работает сейчас –

0

Вашей задача в этой строке коды: final ImageView imageView = (ImageView) findViewById(R.id.QrImageView);

You см., вы пытаетесь изменить ОДИН КОНКРЕТНЫЙ ImageView. Этот ImageView относится к Activity или Fragment, а не к приложению. Когда вы вызываете этот метод в любом действии или фрагменте, что R.id.QrImageView не существует, он вылетает из строя, потому что он не может найти ImageView (потому что этот ImageView выходит за пределы области видимости).

Чтобы решить эту проблему, я бы улучшил ваш код, ВОЗВРАЩАЮЩИЙ BITMAP в методе.

Чтобы быть ясно, что ваш метод должен выглядеть следующим образом:

public Bitmap Encode(String Text_To_Encode) 
{ 
String qrData = "Ahmed"; 
int qrCodeDimention = 500; 
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(qrData, null, 
     Contents.Type.TEXT, BarcodeFormat.QR_CODE.toString(), qrCodeDimention); 
try { 
    return qrCodeEncoder.encodeAsBitmap(); 
} catch (WriterException e) { 
    e.printStackTrace(); 
} 
} 

Теперь в вашей деятельности или фрагмента, просто используйте imageView.setImageBitmap(qrClass.encode(String textToEncode));

Смежные вопросы