嗨,我是Android编程的新手,我正在创建一个应用程序,通过使用Zxing库生成一部分Qrcode 我用方法创建了一个类,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();
}
}
每当我在MainActivity中的Oncreate()方法中调用此方法时,app很遗憾已经停止了 但是当我接受这段代码并直接在MainActivity中运行它时,它运行得很好 我需要知道我做错了什么......
答案 0 :(得分:0)
从普通类使用Activity上下文访问视图:
public void Encode(String Text_To_Encode,Activity activity )
{
final ImageView imageView =
(ImageView)activity.findViewById(R.id.QrImageView);
.....
}
通过传递Activity上下文来自Activity Encode
方法:
Encode(Text_To_Encode,ActivityName.this)
答案 1 :(得分:0)
您的问题出在以下代码行中:final ImageView imageView = (ImageView) findViewById(R.id.QrImageView);
您看,您正在尝试修改一个特定的ImageView。 ImageView属于Activity或Fragment,而不属于Application。当您在R.id.QrImageView
不存在的任何活动或片段中调用该方法时,它将崩溃,因为它无法找到ImageView(这是因为ImageView超出范围)。
要解决这个问题,我会通过RETURNING THE 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));