1

バーコードをタイムスタンプ付きで保存し、それを.csvファイルに保存して、Bluetooth経由で別のデバイスに送信する必要があります。バーコードを入力として受け取るSerialMagicGearKeyboardオプションを介してバーコードを取得しています

問題:アプリケーションを実行してデータを入力すると、ファイルが別のデバイスで受信されると、ファイルには最後のエントリのみが含まれます。

プログラムの構成に間違いがあると思います。もしそうなら、親切にどこを示してください。

そして、長いコードでごめんなさい。

package com.android.app;

public class MainActivity extends Activity {


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    //Timestamp for file name e.g. Data_7-19-2012
    SimpleDateFormat s1 = new SimpleDateFormat("MM-dd-yyyy_hh:mm:ss");
    final String format1 = s1.format(new Date()); 

    //Creating file name
    final String FileName = "Data_"+format1+".csv";


    final EditText addbarcode = (EditText) findViewById(R.id.editText1); 


    //getting file directory
    final File dir = getFilesDir();



    final File shareFile = new File(dir, FileName);

    addbarcode.setOnKeyListener(new OnKeyListener()
    {
        public boolean onKey(View v, int keyCode, KeyEvent event)
        {
            if (event.getAction() == KeyEvent.ACTION_DOWN)
            {
                switch (keyCode)
                {
                    //case KeyEvent.KEYCODE_DPAD_CENTER:
                    case KeyEvent.KEYCODE_ENTER:




                        //to get Timestamp
                        SimpleDateFormat s = new SimpleDateFormat("MM-dd-yyyy hh:mm:ss");
                        String format = s.format(new Date());

                        //get barcode in a variable
                        Editable barcode = addbarcode.getText();


                        final String DATASTRING = new String(""+barcode+","+format+"\n");



                        FileOutputStream fOut = null;
                        try {
                             fOut = openFileOutput(FileName , MODE_WORLD_READABLE);
                        } catch (FileNotFoundException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                        OutputStreamWriter osw = new OutputStreamWriter(fOut); 

                        // Write the string to the file
                        try {
                            osw.write(DATASTRING);
                        } catch (IOException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }

                        try {
                            osw.flush();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        try {
                            osw.close();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        /* ensure that everything is
                         * really written out and close */

                        //For showing data recived on screen


                    FileInputStream fIn = null;
                        try {
                            fIn = openFileInput(FileName);
                        } catch (FileNotFoundException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }

                        InputStreamReader isr = new InputStreamReader(fIn);


                         //Prepare a char-Array that will
                         //* hold the chars we read back in. 
                        char[] inputBuffer = new char[DATASTRING.length()];

                        // Fill the Buffer with data from the file
                        try {
                            isr.read(inputBuffer);
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                        // Transform the chars to a String
                        String readString = new String(inputBuffer);
                        TextView etData= (TextView)findViewById(R.id.textView3);

                        etData.setText(readString);



                        //Clear the editview for new entries
                        addbarcode.setText("");                     

                        return true;
                    default:
                        break;
                }
            }
            return false;
        }
    });



    final Button button = (Button) findViewById(R.id.button1);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Uri u1  =   null;
            u1  =   Uri.fromFile(shareFile);

            Intent sendIntent = new Intent(Intent.ACTION_SEND);
            sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Person Details");
            sendIntent.putExtra(Intent.EXTRA_STREAM, u1);
            sendIntent.setType("text/csv");
            startActivity(sendIntent);
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}


}
4

1 に答える 1

2

openFileOutputでMODE_APPENDフラグを使用する必要があります。そうしないと、古いファイルの内容がデフォルトで上書きされます。

于 2012-07-21T16:01:19.310 に答える