2016-06-08 5 views
0

저는 Android Studio에 비교적 익숙합니다. 작은 QR 코드 스캐너로 작업하고 있습니다. 기본적으로 QR 코드 결과를 텍스트 파일에 추가 한 다음 해당 텍스트 파일을 다른 작업에로드 할 수있게하려는 것입니다. 한 활동의 ​​텍스트 파일에 쓰고 다른 활동의 ListView를 읽으십니까?

는 이미이 MainActivity.java

import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.hardware.camera2.CameraManager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.RelativeLayout; 
import android.widget.Toast; 

import com.google.zxing.Result; 

import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.util.ArrayList; 
import me.dm7.barcodescanner.zxing.ZXingScannerView; 

public class MainActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler { 
    private ZXingScannerView mScannerView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mScannerView = new ZXingScannerView(this); // Programmatically initialize the scanner view 
     setContentView(mScannerView); 

     mScannerView.setResultHandler(this); // Register ourselves as a handler for scan results. 
     mScannerView.startCamera();   // Start camera 
    } 

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

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) 
    { 
     int selectedId = item.getItemId(); 

     switch (selectedId) 
     { 
      case R.id.mniHistory: 
       startActivity(new Intent(MainActivity.this, ResultsActivity.class)); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 


    @Override 
    public void onPause() { 
     super.onPause(); 
     mScannerView.stopCamera();   // Stop camera on pause 
    } 

    @Override 
    public void handleResult(final Result rawResult) { 
     // Do something with the result here 

     Log.e("handler", rawResult.getText()); // Prints scan results 
     Log.e("handler", rawResult.getBarcodeFormat().toString()); // Prints the scan format (qrcode) 

     // Alert Box (the one that asks if you want to send) 
     AlertDialog.Builder builder1 = new AlertDialog.Builder(this); 
     builder1.setTitle("Scan Result"); 
     builder1.setMessage(rawResult.getText() + "\n" + "Would you like to send this?"); 
     builder1.setCancelable(true); 

     builder1.setPositiveButton(
       "Yes", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 

         // ADD SCAN TO TEXT FILE 
         try { 
          OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("History.txt", Context.MODE_PRIVATE)); 
          outputStreamWriter.write(rawResult.getText()); 
          outputStreamWriter.close(); 
         } catch (IOException e) { 
          Log.e("Exception", "File write failed: " + e.toString()); 
         } 
         // DONE ADDING TO HISTORY 
         dialog.cancel(); 
        } 
       }); 

     builder1.setNegativeButton(
       "No", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         dialog.cancel(); 
         mScannerView.resumeCameraPreview(MainActivity.this); 
        } 
       }); 

     AlertDialog alert11 = builder1.create(); 
     alert11.show(); 
    } 
} 

파일이 어떤 이유로 작성되지 입니다 AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" /> 

에 필요한 권한을 추가했습니다. 휴대 전화의 저장 공간에는 표시되지 않습니다. 어쨌든, 여기 (검사 기록을 표시 박하) ResultsActivity.java

ResultsActivity.java

import android.content.Intent; 
import android.os.Environment; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.io.BufferedReader; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 

public class ResultsActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_results); 
     ArrayList<String> completeList = new ArrayList<String>(); 

     ListView listView1; 

     listView1 = (ListView) findViewById(R.id.ResultsListView); 

     try { 
      String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/History.txt"; 
      BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "Cp1252"), 100); 

      String line; 
      // ArrayList<String> lines = new ArrayList<String>(); 
      while ((line = br.readLine()) != null) { 
       completeList.add(line); 
      } 

      br.close(); 

      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, completeList); 


      listView1.setAdapter(adapter); 


     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

내가 그렇고, 제대로의 ListView에 텍스트 파일을 읽고있다인가? 그냥 궁금해.

하지만 어쨌든 내 주요 질문은 내부 저장소에 쓰는 것이고 작동하지 않는 것 같습니다. 무슨 일이 일어나고 있는지에 대한 아이디어가 있습니까?

+0

왜 파일을 사용해야합니까? SharedPreferences에 필요한 값을 저장할 수 없습니까? – Vucko

답변

0

먼저 이러한 접근 방식을 사용하면 안됩니다. 구성 요소간에 간단한 문자열을 공유하기 위해 인 텐트, 서비스, 브로드 캐스트 등과 같은 많은 메모리 물건을 사용할 수 있습니다. 최소한 SharedPreferences을 사용하는 것이 더 간단합니다. 귀하의 질문에 대해서는

, 실수는 조각의 두 줄에이 라인에서

OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("History.txt", Context.MODE_PRIVATE)); 

, 당신은 개인 파일에 데이터를 쓸 수있는 스트림을 열고 있습니다 (예 : 파일이 내부 응용 프로그램 폴더에 저장된다).

String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/History.txt"; 

그리고 여기에 외부 저장 장치 내에서 파일을 찾으려고 그래서

(그냥 다른 폴더), 파일을 찾기 위해, 당신이 방법을 openFileInput

희망을 해당 사용할 수 있습니다, 그것을 도와 줄게.