Как я могу "сохранить" значение из переменной после уничтожения действия? - PullRequest
0 голосов
/ 08 ноября 2018

Я новичок в программировании на 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 голосов
/ 10 ноября 2018

Позвольте мне объяснить, как я недавно внедрил сканер штрих-кода в своем приложении. Мое требование состоит в том, чтобы мои пользователи, которые хотят продавать свои книги через мое приложение, будут сканировать штрих-код на задней обложке своей книги (если она доступна). Как только сканер завершит сканирование, он вернет номер ISBN, сохраненный в штрих-коде. Теперь я должен опубликовать этот номер ISBN в веб-сервисе, который вернет полные данные об этой книге в формате JSON. Теперь я буду анализировать JSON и заполнять мои представления данными, возвращаемыми веб-сервисом.

Теперь в вашем случае вы хотите отсканировать штрих-код, который будет возвращать номер (может быть идентификатором актива), и вы хотите опубликовать этот номер в базе данных или что-то еще (это мое понимание. Если что-то я пропустил, пожалуйста, прокомментируйте ). Теперь просто выполните следующие шаги, чтобы сделать это:

Добавление зависимостей:

Сначала добавьте зависимости штрих-кода в файл уровня приложения build.gradle. Как это:

implementation 'com.journeyapps:zxing-android-embedded:3.2.0@aar'
implementation 'com.google.zxing:core:3.2.1'

Я надеюсь, что вы уже сделали это.

Объявление файла общих настроек:

Теперь объявляйте Shared Preference и Shared Preference файл с любым именем по вашему выбору. Как это:

SharedPreferences sharedPreferences;
public static final String mypreference = "mypref";

Это должно быть сделано в вашем основном классе до onCreate() метода.

Добавить кнопку для запуска сканера штрих-кода:

Теперь добавьте кнопку в нужное место, откуда вы хотите запустить сканер штрих-кода. Помните, что ваш результат от штрих-кода будет возвращен к этой деятельности. Как это:

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

}

Использование значения, сохраненного в предпочтении Shared:

Теперь вы получили идентификатор актива из сканера штрих-кода и сохранили его в общем файле настроек с именем переменной assetID. Помните, что это значение доступно для всех действий в вашем приложении. Вы можете извлечь значение, хранящееся в assetID, из любого места, например:

 sharedpreferences = getActivity().getSharedPreferences("mypref", 0); // 0 - for private mode
 String assetID= sharedpreferences.getString(assetID, "0");

В следующий раз, когда вы откроете сканер штрих-кода и отсканируете другой штрих-код, значение, сохраненное в assetID, будет заменено новым идентификатором актива.

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...