-1

下面我使用 zxing 库创建了一个二维码生成器。它现在的工作方式是用户将文本输入到editText 中,当他们点击Generate 按钮时,它会显示带有该文本的 QR 码。

我的问题是,有没有办法让我更改下面的代码,以便它获取当前的用户 ID (当用户注册时来自 firebase 身份验证)并将其打印到 editText 按钮?

我的目标是让 QR 码获取当前登录的用户并从Firebase获取他们的userID ,并仅基于 userID 创建一个 QR 码。

如果是这样,我很感激任何帮助,或者如果他们是我接受建议的更简单的方法 - 在此先感谢。

二维码.java

public class CodeQR extends AppCompatActivity {

    EditText User_txt;
    Button generateBtn;
    ImageView qrImage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_code_q_r);

        User_txt = (EditText)findViewById(R.id.user_id);
        generateBtn = (Button)findViewById(R.id.generate_btn);
        qrImage = (ImageView)findViewById(R.id.imageview);

        generateBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                MultiFormatWriter multiFormatWriter = new MultiFormatWriter();

                try{
                    BitMatrix bitMatrix = multiFormatWriter.encode(User_txt.getText().toString(),BarcodeFormat.QR_CODE,500,500);
                    BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
                    Bitmap bitmap = barcodeEncoder.createBitmap(bitMatrix);
                    qrImage.setImageBitmap(bitmap);
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        });
    }

}

二维码.xml

<LinearLayout
    android:id="@+id/linearLayout"
    android:layout_width="413dp"
    android:layout_height="160dp"
    android:layout_weight="1"
    android:background="@drawable/header_menu"
    android:gravity="bottom"
    android:orientation="vertical"
    android:padding="12dp"
    tools:ignore="MissingConstraints">

    <TextView
        android:id="@+id/code_txt"
        android:layout_width="281dp"
        android:layout_height="64dp"
        android:text="QR Code"
        android:textColor="#000000"
        android:textSize="30sp" />
</LinearLayout>

<EditText
    android:id="@+id/user_id"
    android:layout_width="match_parent"
    android:layout_height="104dp"
    android:hint="Enter your UserID"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="1.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.287" />

<Button
    android:id="@+id/generate_btn"
    android:layout_width="178dp"
    android:layout_height="84dp"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="GET QR Code"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.536"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.459" />

<ImageView
    android:id="@+id/imageview"
    android:layout_width="281dp"
    android:layout_height="245dp"
    android:layout_gravity="center"
    android:background="#ffffff"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.569"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.82" />


</androidx.constraintlayout.widget.ConstraintLayout>
4

1 回答 1

2

您可以尝试以下代码 -

public class CodeQR extends AppCompatActivity {

    EditText User_txt;
    Button generateBtn;
    ImageView qrImage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        .........

        generateBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //you can put a check here for null user
                setupUserQRcode(FirebaseAuth.getInstance().getCurrentUser().getUid());

            }
        });
    }

    private void setupUserQRcode(String firebaseUID) {
        MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
        try {
            BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
            BitMatrix bitMatrix = multiFormatWriter.encode(firebaseUID, BarcodeFormat.QR_CODE, 500, 500);
            Bitmap bitmap = barcodeEncoder.createBitmap(bitMatrix);
            qrImage.setImageBitmap(bitmap);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

确保首先使用 Firebase设置您的项目。

于 2020-07-30T17:00:54.507 回答