Привет, я новичок в программировании на Android.Данные Spinner в Main Activity теряются после использования камеры для сканирования QR-кода
Когда загружается mainacitivity, я могу получить данные с сервера sql и заполнить его в spinner. Я могу выбрать элемент из spinner и сканировать qrcode/barcode. Как только я остановлю камеру и вернусь к MainActivity, я не могу найти никаких данных в счетчике. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация по этому вопросу. Я предоставил весь код в файле MainActivity.java.
package com.example.vxt.barcodescanner;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.Button;//import android.widget.ProgressBar;import android.widget.Spinner;import android.app.AlertDialog;import android.content.DialogInterface;import com.google.zxing.Result;import me.dm7.barcodescanner.zxing.ZXingScannerView;import java.sql.Connection;import java.sql.ResultSet;import java.sql.PreparedStatement;import java.util.ArrayList;import static com.example.vxt.barcodescanner.R.id.spinner;
public class MainActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler{
ConnectionClass connectionClass;
//ProgressBar pbbar;
Spinner spinnerProducts;
private ZXingScannerView mScannerView;
ArrayList<String> scanned_data = new ArrayList<String>();
ArrayList<String> data = new ArrayList<String>();
String productSelected;
Button scan, pushToDB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
connectionClass = new ConnectionClass();
//pbbar = (ProgressBar) findViewById(R.id.pbbar);
//pbbar.setVisibility(View.VISIBLE);
spinnerProducts = (Spinner) findViewById(spinner);
scan = (Button) findViewById(R.id.button);
pushToDB = (Button) findViewById(R.id.button3);
try {
Connection con = connectionClass.CONN();
if (con != null) {
String query = "select * from Products";
PreparedStatement preparedStatement = con.prepareStatement(query);
ResultSet rs = preparedStatement.executeQuery();
data.add("<--- Select a Product --->");
while(rs.next()){
String product = rs.getString("Product");
String id = Integer.toString(rs.getInt("Id"));
data.add(product + "----" + id);
}
ArrayAdapter NoCoreAdapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1, data);
spinnerProducts.setAdapter(NoCoreAdapter);
//pbbar.setVisibility(View.GONE);
scan.setEnabled(false);
pushToDB.setEnabled(false);
}
} catch (Exception ex) {
//pbbar.setVisibility(View.GONE);
ex.printStackTrace();
}
spinnerProducts.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if(spinnerProducts.getSelectedItemPosition() != 0){
scan.setEnabled(true);
}
productSelected = spinnerProducts.getSelectedItem().toString();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState) { /* do nothing */ }
public void onClick(View v){
mScannerView = new ZXingScannerView(MainActivity.this);
setContentView(mScannerView);
mScannerView.setResultHandler(this);
mScannerView.startCamera();
}
public void onClickDB(View v){
//pbbar.setVisibility(View.VISIBLE);
pushToDB.setEnabled(false);
try {
Connection con = connectionClass.CONN();
if (con != null) {
String query, query1;
PreparedStatement preparedStatement, preparedStatement1; // = con.prepareStatement(query);
ResultSet rs; // = preparedStatement.executeQuery();
String[] splArray;
//SimpleCursorAdapter adapter = (SimpleCursorAdapter) spinnerProducts.getAdapter();
for (int position = 1; position < scanned_data.size(); position++) {
splArray = scanned_data.get(position).split(",");
query = "select * from Products_Barcode where ProductId ='" + splArray[1] + "'";
preparedStatement = con.prepareStatement(query);
rs = preparedStatement.executeQuery();
if(rs.next()){
query1 = "Update Products_Barcode set Barcode = '" + splArray[2] + "' where ProductId = '" + splArray[1] + "'";
preparedStatement1 = con.prepareStatement(query1);
preparedStatement1.executeQuery();
}
else{
query1 = "insert into Products_Barcode values ('" + splArray[1] + "','" + splArray[0] + "','" + splArray[2] + "');";
preparedStatement1 = con.prepareStatement(query1);
preparedStatement1.executeQuery();
}
}
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Data tranferred successfully")
.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
dialog.cancel();
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
} catch (Exception ex) {
//pbbar.setVisibility(View.GONE);
ex.printStackTrace();
}
}
@Override
protected void onPause(){
super.onPause();
mScannerView.stopCamera();
}
@Override
public void handleResult(Result result) {
//if(chk == 0){
Log.v("handleResult", result.getText());
AlertDialog.Builder builder = new AlertDialog.Builder(this);
String source_text = result.getText();
String prod = productSelected.replace("----", ",");
scanned_data.add(prod + "," + source_text);
builder.setTitle("Scan Result");
builder.setMessage("Scan complete")
//chk = 1;
.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, close
// current activity
dialog.cancel();
/*chk = 1;
mScannerView.resumeCameraPreview(MainActivity.this);*/
}
});
spinnerProducts.setSelection(0);
scan.setEnabled(false);
if(!pushToDB.isEnabled()){
pushToDB.setEnabled(true);
}
mScannerView.stopCamera();
setContentView(R.layout.activity_main);
//pbbar.setVisibility(View.GONE);
ArrayAdapter NoCoreAdapter = new ArrayAdapter(MainActivity.this,android.R.layout.simple_spinner_item, data);
NoCoreAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerProducts.setAdapter(NoCoreAdapter);
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
}
Вы можете попробовать перевести SQL-соединение на отдельный метод и назвать его как из OnCreate, так и OnResume? я предполагаю, что spinner получает повторно заполненный OnResume, но поскольку никакого кода там нет, он теряет данные. Возможно, я ошибаюсь. – Phantomazi
@Phantomazi спасибо. Я попробовал вашу идею создания отдельного метода и назвал его onCreate и onResume. У счетчика в начале было два набора данных. Но когда я сканирую штрих-код и возвращаюсь к Activity_main, счетчик пуст. – venutamizh