活动销毁后,如何从变量中“保存”值?

时间:2018-11-08 15:00:07

标签: android android-activity

我在Java编程方面还很陌生,需要您的帮助。

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

我停留在保存点。

我有3(4)个活动。其中之一被复制或拆分为取回。

获取的代码:

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);
    }

}

这是MainActivity:

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);
    }
}

1 个答案:

答案 0 :(得分:1)

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

现在,在您的情况下,您要扫描条形码,该条形码将返回一个数字(可能是资产ID),并且您希望将此数字发布到数据库或其他内容(这是我的理解。如果我错过了某些内容,请发表评论) )。现在只需执行以下步骤即可完成此操作:

添加依赖项:

首先在您的应用程序级别build.gradle文件中添加条形码相关性。像这样:

SALT

我希望你已经做到了。

声明共享的首选项文件:

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

    BBP        RSI     close      high       low      open        time  \
0   NaN        NaN  0.000069  0.000071  0.000068  0.000068  1534626000   
1   NaN        NaN  0.000070  0.000070  0.000068  0.000069  1534644000   
2   NaN        NaN  0.000072  0.000072  0.000068  0.000070  1534662000   
3   NaN        NaN  0.000073  0.000073  0.000071  0.000072  1534680000   
4   NaN        NaN  0.000074  0.000074  0.000072  0.000073  1534698000   
5   NaN        NaN  0.000073  0.000074  0.000072  0.000074  1534716000   
6   NaN        NaN  0.000073  0.000074  0.000072  0.000073  1534734000   
7   NaN        NaN  0.000071  0.000073  0.000071  0.000073  1534752000   
8   NaN        NaN  0.000072  0.000074  0.000070  0.000071  1534770000   
9   NaN        NaN  0.000069  0.000072  0.000069  0.000072  1534788000   
10  NaN        NaN  0.000070  0.000071  0.000068  0.000069  1534806000   
11  NaN        NaN  0.000072  0.000072  0.000069  0.000070  1534824000   
12  NaN        NaN  0.000070  0.000072  0.000070  0.000072  1534842000   
13  NaN        NaN  0.000070  0.000070  0.000069  0.000070  1534860000   
14  NaN  56.138260  0.000071  0.000072  0.000069  0.000070  1534878000   
15  NaN  53.757682  0.000071  0.000073  0.000071  0.000071  1534896000   
16  NaN  56.547317  0.000072  0.000072  0.000070  0.000071  1534914000   
17  NaN  52.340624  0.000070  0.000072  0.000070  0.000072  1534932000   
18  NaN  42.426811  0.000067  0.000071  0.000067  0.000070  1534950000   
19 -inf  41.721667  0.000067  0.000067  0.000065  0.000067  1534968000   
20 -inf  41.087686  0.000066  0.000067  0.000066  0.000067  1534986000   
21 -inf  42.663976  0.000067  0.000067  0.000066  0.000066  1535004000   
22 -inf  46.241512  0.000068  0.000068  0.000066  0.000067  1535022000   
23 -inf  47.300220  0.000068  0.000069  0.000067  0.000068  1535040000   
24 -inf  47.984947  0.000068  0.000069  0.000067  0.000068  1535058000   
25 -inf  47.984947  0.000068  0.000069  0.000067  0.000068  1535076000   
26 -inf  50.590822  0.000069  0.000069  0.000068  0.000068  1535094000   
27  inf  56.805348  0.000071  0.000071  0.000068  0.000069  1535112000   
28  inf  57.658800  0.000071  0.000072  0.000069  0.000071  1535130000   
29  inf  63.418810  0.000073  0.000073  0.000070  0.000071  1535148000 

这应该在您的主类中执行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";

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

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

onCreate()

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

现在,您已经从条形码扫描仪接收到资产ID,并将其存储在具有变量名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); } } 中的值:

assetID

下次打开条形码扫描仪并扫描另一个条形码时,资产ID中存储的值将被新的资产ID覆盖。

希望这会有所帮助:)