Android 在活动被销毁后,如何“保存”变量中的值?

Android 在活动被销毁后,如何“保存”变量中的值?,android,android-activity,Android,Android Activity,我是Java编程新手,需要你的帮助 我是一家公司的实习生,我需要在Android Studio上做一个盘点应用程序。 我实现了一个扫描仪ZXing,它可以工作,但我需要保存结果。我有不同的按钮,对于这些按钮,我需要保存扫描仪结果。例如:我单击按钮A,结果需要保存在变量A中。当我单击按钮B时,它需要保存在变量B中。之后,我想通过电子邮件发送此变量 我坚持在储蓄点 我有34项活动。其中一个被复制或拆分为put和FETCH 获取的代码: package app.local.leipziger_mess

我是Java编程新手,需要你的帮助

我是一家公司的实习生,我需要在Android Studio上做一个盘点应用程序。 我实现了一个扫描仪ZXing,它可以工作,但我需要保存结果。我有不同的按钮,对于这些按钮,我需要保存扫描仪结果。例如:我单击按钮A,结果需要保存在变量A中。当我单击按钮B时,它需要保存在变量B中。之后,我想通过电子邮件发送此变量

我坚持在储蓄点

我有34项活动。其中一个被复制或拆分为put和FETCH

获取的代码:

package app.local.leipziger_messe.lbrenn.cable;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Toast;


public class AbgeholtActivity extends AppCompatActivity {
    //setzt die für die Buttonzuordnung nötigen Strings
    ZwischenSpeicher zs = new ZwischenSpeicher();

    //Setzt die IDs für die einzelnen Checkboxen
    CheckBox b1_ab;
    CheckBox b2_ab;
    CheckBox b3_ab;
    CheckBox b4_ab;
    CheckBox b5_ab;
    CheckBox b6_ab;

    public String test = "1";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //Superklasse wird festgelegt
        super.onCreate(savedInstanceState);
        //Es wird als Inhalt der Activity das angegebene Layout festgelegt
        setContentView(R.layout.activity_abgeholt);


        //Checkboxen werden definiert
        b1_ab = (CheckBox)findViewById(R.id.b1_ab);
        b2_ab = (CheckBox)findViewById(R.id.b2_ab);
        b3_ab = (CheckBox)findViewById(R.id.b3_ab);
        b4_ab = (CheckBox)findViewById(R.id.b4_ab);
        b5_ab = (CheckBox)findViewById(R.id.b5_ab);
        b6_ab = (CheckBox)findViewById(R.id.b6_ab);

        //TEST NUR EIN TEST



        //Buttons werden erstellt und einer ID zugewiesen
        final SimpleScannerActivity test_scanner = new SimpleScannerActivity();

        final Button button_abgeholt_pc = findViewById(R.id.abgeholt_pc);
        button_abgeholt_pc.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //Buttonid wird festgelegt und der Intent wird festgelegt
                zs.button_ergebnis[0] = test;
                Toast.makeText(getApplicationContext(),zs.button_ergebnis[0],Toast.LENGTH_LONG).show();
                //ntent abgeholtpcIntent = new Intent(getApplicationContext(),SimpleScannerActivity.class);
                //startActivity(abgeholtpcIntent);
            }
        });
        final Button button_abgeholt_mo = findViewById(R.id.abgeholt_mo);
        button_abgeholt_mo.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //Buttonid wird festgelegt und der Intent wird festgelegt
                zs.buttonid = "2";
                Intent abgeholtpcIntent = new Intent(getApplicationContext(),SimpleScannerActivity.class);
                startActivity(abgeholtpcIntent);
                String ergebnis = test_scanner.ergebnis_test();
            }
        });
        final Button button_abgeholt_dr = findViewById(R.id.abgeholt_dr);
        button_abgeholt_dr.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //Buttonid wird festgelegt und der Intent wird festgelegt
                zs.buttonid = "3";
                Intent abgeholtpcIntent = new Intent(getApplicationContext(),SimpleScannerActivity.class);
                startActivity(abgeholtpcIntent);
            }
        });
        final Button button_abgeholt_tel = findViewById(R.id.abgeholt_tel);
        button_abgeholt_tel.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //Buttonid wird festgelegt und der Intent wird festgelegt
                zs.buttonid = "4";
                Intent abgeholtpcIntent = new Intent(getApplicationContext(),SimpleScannerActivity.class);
                startActivity(abgeholtpcIntent);
            }
        });
    }

    public void checkbox_clicked(View v)
    {
        //Checkt ob die Checkbox angeklickt ist oder nicht (Text ist noch Platzhalter mäßig vorhanden)
        if(b1_ab.isChecked())
        {
            Toast.makeText(getApplicationContext(), "Es wurde keine ID gefunden! Wechsel zur Main Activity1", Toast.LENGTH_LONG).show();
        }
        else if (b2_ab.isChecked())
        {
            Toast.makeText(getApplicationContext(), "Es wurde keine ID gefunden! Wechsel zur Main Activity2", Toast.LENGTH_LONG).show();
        }else if (b3_ab.isChecked())
        {
            Toast.makeText(getApplicationContext(), "Es wurde keine ID gefunden! Wechsel zur Main Activity3", Toast.LENGTH_LONG).show();
        }else if (b4_ab.isChecked())
        {
            Toast.makeText(getApplicationContext(), "Es wurde keine ID gefunden! Wechsel zur Main 4", Toast.LENGTH_LONG).show();
        }else if (b5_ab.isChecked())
        {
            Toast.makeText(getApplicationContext(), "Es wurde keine ID gefunden! Wechsel zur Main Activity5", Toast.LENGTH_LONG).show();
        }else if (b6_ab.isChecked()) {
            Toast.makeText(getApplicationContext(), "Es wurde keine ID gefunden! Wechsel zur Main Activity6", Toast.LENGTH_LONG).show();
        }

    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //Setzt das Menu oben Rechts
        getMenuInflater().inflate(R.menu.menu_hilfe, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        if (id == R.id.action_help) {
            //Führt noch nichts aus -> wird dann das von der Main Activity ausführen!

            return true;
        }

        return super.onOptionsItemSelected(item);
    }

}
这是主要的活动:

package app.local.leipziger_messe.lbrenn.cable;

import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.v7.app.AlertDialog;

public class MainActivity extends AppCompatActivity {


    //Berechtigungscode für die Permissionsabfrage
    private int CAMERA_PERMISSION_CODE = 1;

    //Erstellung der Activity
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //Superklasse wird vergeben
        super.onCreate(savedInstanceState);
        //Es wird der Inhalt der Activity gesetzt
        setContentView(R.layout.activity_main);
        //Die Permissions werden abgefragt
        pCheck();

        //Buttons werden initialisiert und erstellt
        final Button button_abgeholt = findViewById(R.id.button_abgeholt);
        button_abgeholt.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //Beim klicken wird ein neuer Intent erstellt und man wird auf die AbgeholtActivity weitergeleitet
                Intent abgeholttIntent = new Intent(getApplicationContext(),AbgeholtActivity.class);
                startActivity(abgeholttIntent);
            }
        });

        final Button button_hingestellt = findViewById(R.id.button_hingestellt);
        button_hingestellt.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //Beim klicken wird ein neuer Intent erstellt und man wird auf die HingestelltActivity weitergeleitet

                Intent hingestelltIntent = new Intent(getApplicationContext(),HingestelltActivity.class);
                startActivity(hingestelltIntent);
            }
        });

        final Button button_weiter = findViewById(R.id.button_weiter);
        button_weiter.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //Beim klicken wird ein neuer Intent erstellt und man wird auf die WeiterActivity weitergeleitet

                Intent testIntent = new Intent(getApplicationContext(),SimpleScannerActivity.class);
                startActivity(testIntent);
            }
        });
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        //Checkt ob die ID von dem Menu das Hilfe Menu ist
        if (id == R.id.action_help) {
            //Führt den Debug aus
            String debug_test[] = new String[8];

            //Erstellt eine neue Instanz von der SimpleScannerActivity
            ZwischenSpeicher debug_abfrage = new ZwischenSpeicher();
            //Fragt die einzelnen IDs ab, die in der SimpleScannerActivity gesetzt wurden
            debug_test[0] = debug_abfrage.button_ergebnis[0];

            //Gibt die einzelnen Ergebnisse aus
            Toast.makeText(this, debug_test[0], Toast.LENGTH_SHORT).show();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
    //Checkt ob die Permissions in der Manifest Datei gesetzt wurden
    private void requestCameraPermission() {
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.CAMERA)) {
        } else {
            ActivityCompat.requestPermissions(this,
                    new String[] {Manifest.permission.CAMERA}, CAMERA_PERMISSION_CODE);
        }
    }


    //Gibt das Ergebnis aus und zeigt ob die Berechtigung vom Nutzer erteilt wurde oder nicht
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == CAMERA_PERMISSION_CODE)  {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(this, "Berechtigung erteilt", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "Berechtigung verweigert", Toast.LENGTH_SHORT).show();
            }
        }
    }
    //Führt den ganzen Check aus
    public void pCheck() {
        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(this, "Berechtigungen vollständig vergeben",Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(this, "Berechtigungen müssen noch vergeben werden!",Toast.LENGTH_LONG).show();
            requestCameraPermission();
        }
    }
}
这是我在代码中测试的扫描仪:

package app.local.leipziger_messe.lbrenn.cable;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.PersistableBundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import java.io.*;
import app.local.leipziger_messe.lbrenn.cable.MainActivity;

import com.google.zxing.Result;

import java.io.FileWriter;

import me.dm7.barcodescanner.zxing.ZXingScannerView;

public class SimpleScannerActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler {
    //Die nötigen Buttonids werden definiert
    public final static String STATE_DATA = "ButtonIDs";
    static final String LOG_TAG = "Test_test";

    //Strings zur Nutzung der Buttonids werden festgelegt sowie die nötigen Scanner Elemente
    public String abgeholt_pc_id;
    public String abgeholt_mo_id;
    public String abgeholt_dr_id;
    public String abgeholt_tel_id;
    public String hingestellt_pc_id;
    public String hingestellt_mo_id;
    public String hingestellt_dr_id;
    public String hingestellt_tel_id;
    private static final String TAG = "Code Results:";
    private Result scanResult;
    public ZXingScannerView mScannerView;


    @Override
    public void onCreate(Bundle state) {
        //Superklasse wird festgelegt
        super.onCreate(state);
        //Scanner Ansicht wird initzialisiert
        mScannerView = new ZXingScannerView(this);   // Programmatically initialize the scanner view
        //Der Scanner wird als Inhalt gesetzt
        setContentView(mScannerView);                // Set the scanner view as the content view
    }

    @Override
    public void onResume() {
        //legt die Superklasse fest
        super.onResume();
        ZwischenSpeicher zs = new ZwischenSpeicher();
        mScannerView.setResultHandler(this); // Register ourselves as a handler for scan results.
        mScannerView.startCamera();          // Start camera on resume
        Toast.makeText(this, zs.button_ergebnis[0],Toast.LENGTH_LONG).show();
    }

    @Override
    public void onPause() {
        //Legt die Superklasse fest
        super.onPause();
        mScannerView.stopCamera();           // Stop camera on pause
    }

    @Override
    public void handleResult(Result rawResult) {
        //führt die Kamerview weiter aus
        mScannerView.resumeCameraPreview(this);
        //Setzt das das scanResult das rawResult ist
        scanResult=rawResult;
        //führt die untere Funktion aus
        //getrawresult_test();
        Log.d("handler","");
        AbgeholtActivity AA = new AbgeholtActivity();
        ZwischenSpeicher zs = new ZwischenSpeicher();
        Toast.makeText(this, zs.button_ergebnis[0],Toast.LENGTH_LONG).show();
    }

    public Result getrawresult_test() {
        Log.d("getrawresult","Result");
        AbgeholtActivity AA = new AbgeholtActivity();
        ZwischenSpeicher zs = new ZwischenSpeicher();

        //liest das Ergebnis aus dem handleResult aus
        String result = scanResult.getText();
//
//
//
//
//        //Checkt welcher Button gedrückt wurde und speichert das Ergebnis in die entsprechende Variable ein
//
//        if (zs.buttonid == "1") {
//            Log.d("buttonid1","Result");
//            abgeholt_pc_id = result;
//            zs.buttonID_array[0] = abgeholt_pc_id;
//            Toast.makeText(getApplicationContext(), zs.buttonID_array[0]+" wurde gespeichert!", Toast.LENGTH_LONG).show();
//            wechselzumainActivity();
//        } else if(zs.buttonid == "2") {
//            Log.d("buttonid2","Result");
//            abgeholt_mo_id = result;
//            zs.buttonID_array[1] = abgeholt_mo_id;
//            Toast.makeText(getApplicationContext(), zs.buttonID_array[1]+" wurde gespeichert!", Toast.LENGTH_LONG).show();
//            wechselzumainActivity();
//        } else if(zs.buttonid == "3") {
//            Log.d("buttonid3","Result");
//            abgeholt_dr_id = result;
//            zs.buttonID_array[2] = abgeholt_dr_id;
//            Toast.makeText(getApplicationContext(), zs.buttonID_array[2]+" wurde gespeichert!", Toast.LENGTH_LONG).show();
//            wechselzumainActivity();
//        } else if(zs.buttonid == "4") {
//            Log.d("buttonid4","Result");
//            abgeholt_tel_id = result;
//            zs.buttonID_array[3] = abgeholt_tel_id;
//            Toast.makeText(getApplicationContext(), zs.buttonID_array[3]+" wurde gespeichert!", Toast.LENGTH_LONG).show();
//            wechselzumainActivity();
//        } else if(zs.buttonid == "5") {
//            Log.d("buttonid5","Result");
//            hingestellt_pc_id = result;
//            zs.buttonID_array[4] = hingestellt_pc_id;
//            Toast.makeText(getApplicationContext(), zs.buttonID_array[4]+" wurde gespeichert!", Toast.LENGTH_LONG).show();
//            wechselzumainActivity();
//        } else if(zs.buttonid == "6") {
//            Log.d("buttonid6","Result");
//            zs.buttonID_array[5] = hingestellt_mo_id;
//            Toast.makeText(getApplicationContext(), zs.buttonID_array[5]+" wurde gespeichert!", Toast.LENGTH_LONG).show();
//            wechselzumainActivity();
//        } else if(zs.buttonid == "7") {
//            Log.d("buttonid7","Result");
//            hingestellt_dr_id = result;
//            zs.buttonID_array[6] = hingestellt_dr_id;
//            Toast.makeText(getApplicationContext(), zs.buttonID_array[6]+" wurde gespeichert!", Toast.LENGTH_LONG).show();
//            wechselzumainActivity();
//        } else if(zs.buttonid == "8") {
//            Log.d("buttonid8","Result");
//            hingestellt_tel_id = result;
//            zs.buttonID_array[7] = hingestellt_tel_id;
//            Toast.makeText(getApplicationContext(), zs.buttonID_array[7]+" wurde gespeichert!", Toast.LENGTH_LONG).show();
//            wechselzumainActivity();
//        } else {
//            Toast.makeText(getApplicationContext(), "Es wurde keine ID gefunden! Wechsel zur Main Activity", Toast.LENGTH_LONG).show();
//            wechselzumainActivity();
//        }
        return scanResult;
    }

    public String ergebnis_test() {
        String ergebnis = scanResult.getText();
        return ergebnis;
    }

    //Es wird eine Intent erstellt, die zur MainActivity wechselt
    public void wechselzumainActivity() {
        Intent mainactivityIntent = new Intent(getApplicationContext(),MainActivity.class);
        startActivity(mainactivityIntent);
    }
}

让我解释一下最近我是如何在我的应用程序中实现条形码扫描仪的。我的要求是,我的用户如果想通过我的应用程序销售他们的书,将扫描他们书封底的条形码(如果有)。一旦扫描仪完成扫描,它将返回条形码中存储的ISBN号。现在,我必须将ISBN号发布到一个Web服务,该服务将以JSON的形式返回关于该书的完整数据。现在,我将解析JSON并用webservice返回的数据填充视图

现在,在您的情况下,您需要扫描条形码,该条形码将返回一个数字,可能是资产ID,您需要将该数字发布到数据库或我的理解。如果我遗漏了什么,请评论。现在只需按照以下步骤完成此操作:

添加依赖项:

首先在应用程序级别build.gradle文件中添加条形码依赖项。像这样:

implementation 'com.journeyapps:zxing-android-embedded:3.2.0@aar'
implementation 'com.google.zxing:core:3.2.1'
SharedPreferences sharedPreferences;
public static final String mypreference = "mypref";
Button barcodeBtn = findViewById(R.id.barcodeBtn);
barcodeBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(final View view) {
        IntentIntegrator integrator = new IntentIntegrator(MainActivity.this);
        integrator.setPrompt("Scan the barcode on the asset");
        integrator.setCameraId(0);  // Use a specific camera of the device
        integrator.setOrientationLocked(true);
        integrator.setBeepEnabled(true);
        integrator.setCaptureActivity(CaptureActivityPortrait.class);
        integrator.initiateScan();
    }
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    final IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    if(result != null) {
        if(result.getContents() == null) {
            Log.d("MainActivity", "Cancelled scan");
            Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();
        } else {
            Log.d("MainActivity", "Scanned");
            Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();
            // This is where you are saving the scanned asset ID in the shared preference file.
            sharedpreferences = getActivity().getSharedPreferences("mypref", 0); // 0 - for private mode
            SharedPreferences.Editor editor = sharedpreferences.edit();
            editor.putString("assetID", result.getContents());
            editor.apply();
        }
    } else {
        // This is important, otherwise the result will not be passed to the fragment
        super.onActivityResult(requestCode, resultCode, data);
    }

}
我希望你已经这样做了

声明共享首选项文件:

现在声明共享首选项,并使用您选择的任何名称声明共享首选项文件。像这样:

implementation 'com.journeyapps:zxing-android-embedded:3.2.0@aar'
implementation 'com.google.zxing:core:3.2.1'
SharedPreferences sharedPreferences;
public static final String mypreference = "mypref";
Button barcodeBtn = findViewById(R.id.barcodeBtn);
barcodeBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(final View view) {
        IntentIntegrator integrator = new IntentIntegrator(MainActivity.this);
        integrator.setPrompt("Scan the barcode on the asset");
        integrator.setCameraId(0);  // Use a specific camera of the device
        integrator.setOrientationLocked(true);
        integrator.setBeepEnabled(true);
        integrator.setCaptureActivity(CaptureActivityPortrait.class);
        integrator.initiateScan();
    }
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    final IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    if(result != null) {
        if(result.getContents() == null) {
            Log.d("MainActivity", "Cancelled scan");
            Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();
        } else {
            Log.d("MainActivity", "Scanned");
            Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();
            // This is where you are saving the scanned asset ID in the shared preference file.
            sharedpreferences = getActivity().getSharedPreferences("mypref", 0); // 0 - for private mode
            SharedPreferences.Editor editor = sharedpreferences.edit();
            editor.putString("assetID", result.getContents());
            editor.apply();
        }
    } else {
        // This is important, otherwise the result will not be passed to the fragment
        super.onActivityResult(requestCode, resultCode, data);
    }

}
这应该在onCreate方法之前在主类中完成

添加按钮以启动条形码扫描仪:

现在,在想要启动条形码扫描仪的所需活动处添加一个按钮。请记住,条形码的结果将返回到此活动。像这样:

implementation 'com.journeyapps:zxing-android-embedded:3.2.0@aar'
implementation 'com.google.zxing:core:3.2.1'
SharedPreferences sharedPreferences;
public static final String mypreference = "mypref";
Button barcodeBtn = findViewById(R.id.barcodeBtn);
barcodeBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(final View view) {
        IntentIntegrator integrator = new IntentIntegrator(MainActivity.this);
        integrator.setPrompt("Scan the barcode on the asset");
        integrator.setCameraId(0);  // Use a specific camera of the device
        integrator.setOrientationLocked(true);
        integrator.setBeepEnabled(true);
        integrator.setCaptureActivity(CaptureActivityPortrait.class);
        integrator.initiateScan();
    }
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    final IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    if(result != null) {
        if(result.getContents() == null) {
            Log.d("MainActivity", "Cancelled scan");
            Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();
        } else {
            Log.d("MainActivity", "Scanned");
            Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();
            // This is where you are saving the scanned asset ID in the shared preference file.
            sharedpreferences = getActivity().getSharedPreferences("mypref", 0); // 0 - for private mode
            SharedPreferences.Editor editor = sharedpreferences.edit();
            editor.putString("assetID", result.getContents());
            editor.apply();
        }
    } else {
        // This is important, otherwise the result will not be passed to the fragment
        super.onActivityResult(requestCode, resultCode, data);
    }

}
检索扫描的资产ID并存储在共享首选项中:

点击扫描仪按钮后,可以看到条形码扫描仪已打开,可以扫描条形码。扫描结束后,扫描仪会将扫描的资产ID返回给主机活动。现在,您必须捕获资产ID并将其存储在共享首选项文件中。像这样:

implementation 'com.journeyapps:zxing-android-embedded:3.2.0@aar'
implementation 'com.google.zxing:core:3.2.1'
SharedPreferences sharedPreferences;
public static final String mypreference = "mypref";
Button barcodeBtn = findViewById(R.id.barcodeBtn);
barcodeBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(final View view) {
        IntentIntegrator integrator = new IntentIntegrator(MainActivity.this);
        integrator.setPrompt("Scan the barcode on the asset");
        integrator.setCameraId(0);  // Use a specific camera of the device
        integrator.setOrientationLocked(true);
        integrator.setBeepEnabled(true);
        integrator.setCaptureActivity(CaptureActivityPortrait.class);
        integrator.initiateScan();
    }
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    final IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    if(result != null) {
        if(result.getContents() == null) {
            Log.d("MainActivity", "Cancelled scan");
            Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();
        } else {
            Log.d("MainActivity", "Scanned");
            Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();
            // This is where you are saving the scanned asset ID in the shared preference file.
            sharedpreferences = getActivity().getSharedPreferences("mypref", 0); // 0 - for private mode
            SharedPreferences.Editor editor = sharedpreferences.edit();
            editor.putString("assetID", result.getContents());
            editor.apply();
        }
    } else {
        // This is important, otherwise the result will not be passed to the fragment
        super.onActivityResult(requestCode, resultCode, data);
    }

}
使用存储在共享首选项中的值:

现在,您已经从条形码扫描仪接收到资产ID,并将其存储在一个共享首选项文件中,该文件的变量名为assetID。请记住,此值适用于应用程序中的所有活动。您可以从以下位置检索存储在assetID中的值:

 sharedpreferences = getActivity().getSharedPreferences("mypref", 0); // 0 - for private mode
 String assetID= sharedpreferences.getString(assetID, "0");
下次打开条形码扫描仪并扫描另一个条形码时,存储在assetID中的值将被新的资产ID覆盖


希望这有帮助:

您面临的确切问题是什么?你的应用程序崩溃了吗?如果是这样,请在此处添加logcat跟踪。使用singleton类和/或将您的值保存在共享中preferences@KarthicSrinivasan不,我的应用程序不会崩溃。我没有从我的扫描器获取到我的主活动的值。例如我想从电脑上扫描条形码。所以我打开应用程序,然后单击“放置”和“电脑盘点”,然后扫描仪打开。我扫描代码,但当我返回到另一个活动时,变量的值为null。我希望你能理解。顺便说一句,我的英语很抱歉。@SinanCeylan我可以试试这个:我已经添加了一个答案。请检查:我有自己的方法,但谢谢你:。谢谢你的回答