从另一个类运行代码

时间:2015-02-16 02:32:48

标签: android

嗨,我是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中运行它时,它运行得很好 我需要知道我做错了什么......

2 个答案:

答案 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));

即可