2017-01-27 5 views
2

こんにちは、私はAndroidプログラミングが初めてです。QRコードをスキャンするためにカメラを使用した後、メインアクティビティのスピナーデータが失われる

mainacitivityがロードされると、SQL Serverからデータをフェッチしてスピナーに読み込むことができます。私はスピナーからアイテムを選択し、qrcode /バーコードをスキャンすることができます。カメラを停止して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(); 

    } 
} 
+0

別の方法にSQL接続を移動し、OnCreateとOnResumeの両方から呼び出すことができますか?私の推測では、スピナーにはOnResumeが再設定されていますが、コードがないのでデータが失われます。私は間違っているかもしれない。 – Phantomazi

+0

@Phantomaziありがとうございます。私は、別々のメソッドを作成し、それをonCreateとonResumeと呼ぶというあなたの考えを試しました。最初のスピナーには2組のデータがありました。しかし、バーコードをスキャンしてactivity_mainに戻ると、スピナーは空白になります。 – venutamizh

答えて

0

メソッドのどこかにスピナーデータを保存する必要があります。

@Override 
protected void onPause(){ 
    Data data = spinner.getData(); //Implement your own logic 
} 

あなたが戻っMainActivityに来るとき、あなたが戻っスピナーにデータを供給する必要がどこonResumeメソッドが呼び出されます。

@Override 
protected void onResume(){ 
    spinner.setData(data); //Implement your own logic 
} 

[EDIT]

問題は、あなたが悪い習慣ですsetContentView()を複数回使用している、です。 Android documentation

アクティビティの内容を明示的なビューに設定します。このビューは、アクティビティのビュー階層に直接配置されます。

現在お望みのものを達成したい場合は、フラグメントを使用する必要があります。

要するに、setContentView()に複数回電話をかけないでください。アクティビティを変更せずにxmlを複数表示するには、fragmentを使用してください。

+0

間違いをした!編集されました。最新のものを確認してください。 –

+0

アドバイスしたとおりにコードを修正しましたが、動作しないようです。愚かな間違いでなければならないが、それを見つけることができなかった。私は修正されたコードをtxtファイルとして紹介しました。一度それを通り抜けて私にsuggesstionを与えてください。ありがとうございました。 https://drive.google.com/open?id=0B1xgv6ovbMbWSXB5c2Q4UDltSHM – venutamizh

+0

また、 'onResume'メソッドから' loadProducts() 'を呼び出してみてください。あなたのアクティビティが初めて実行されたときでも、 'onResume()'が呼び出されるので、 'loadProducts()'と 'fillSpinner()'を 'onCreate()'から削除してください。 –

関連する問題