2013-06-20 2 views
1

사용자가 여러 'edittext'상자에 텍스트를 입력해야하는 안드로이드 응용 프로그램을 개발 중입니다. 입력 한 데이터를 가져 와서 텍스트 파일에 저장하려고합니다. 처음 몇 상자의 데이터를 저장하는 응용 프로그램이 있습니다. 나는 for 루프와 다른 것들을 사용하는 것과 같은 많은 접근법을 시도해 왔지만 여전히 효과가 없다. 현재 목록의 처음 몇 비트를 목록에 추가하고, 텍스트 파일에 쓰고, 목록을 비운 다음 나머지 데이터를 추가하고 파일에 추가하려고하면 배열 목록을 사용하고 있습니다. 응용 프로그램을 디버깅 할 때 충돌이나 오류없이 새 데이터의 첫 번째 비트를 추가하고 중지합니다. 여러 입력에서 파일에 데이터 저장

내 코드입니다 :

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.OutputStreamWriter; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 

import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.os.StrictMode; 
import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.content.Intent; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class MainActivity extends Activity implements OnClickListener{ 

    private Button submitForm,resetForm,btnEmail; 
    private String saveName; 
    private EditText name,depot,date,time,location,details,outcome,did; 
    private String attachedPathFile; 
    private File folder; 
    File myFile; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     //StrictMode.enableDefaults(); 
     name = (EditText)findViewById(R.id.nameText); 
     depot = (EditText)findViewById(R.id.DepotText); 
     date = (EditText)findViewById(R.id.DateText); 
     time = (EditText)findViewById(R.id.LocationText); 
     details = (EditText)findViewById(R.id.IncidentText); 
     outcome = (EditText)findViewById(R.id.OutcomeText); 
     did = (EditText)findViewById(R.id.DetailsText); 

     submitForm = (Button)findViewById(R.id.SubmitButton); 
     submitForm.setOnClickListener(new OnClickListener(){ 

      @SuppressLint("SimpleDateFormat") 
      public void onClick(View v) { 
       // write on SD card file data in the text box 
       try { 
        folder = new File(Environment.getExternalStorageDirectory(),"Close Call Reports"); 
        folder.mkdirs(); 
        saveName = new SimpleDateFormat("yyyy-MM-dd HH mm ss").format(new Date()); 
        myFile = new File(Environment.getExternalStorageDirectory().toString()+"/Close Call Reports/"+saveName+".txt"); 
        myFile.createNewFile(); 
//     FileOutputStream fOut = new FileOutputStream(myFile, true); 
//     OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut); 
//          
//     //gets text data to write to file 
//     String data = "Your Name: "+name.getText().toString()+"\n"+"Your Depot: "+depot.getText().toString()+"\n"+"Date: "+ 
//     date.getText().toString()+"\n"+"Time: "+time.getText().toString()+"\n"; 

//     String data2 ="Location: "+location.getText().toString()+ 
//       "\n"+ "Incident: "+details.getText().toString()+"\n"+"Potential Outcome: "+outcome.getText().toString()+"\n"+ 
//     "What did you do ? "+did.getText().toString(); 


        List<String> data = new ArrayList<String>(); 
        data.add("Your Name: "+name.getText().toString()); 
        data.add("Your Depot: "+depot.getText().toString()); 
        data.add("Date: "+date.getText().toString()); 
        data.add("Time: "+time.getText().toString()); 

        appendToFile(data); 

        data.clear(); 

        Log.v("DEBUGGING", "got here 1"); 

        //data = new ArrayList<String>(); 
        data.add("Location: "+location.getText().toString()); 
        data.add("Incident: "+details.getText().toString()); 
        data.add("Potential Outcome: "+outcome.getText().toString()); 
        data.add("What did you do ? "+did.getText().toString()); 

        Log.v("DEBUGGING", "got here 2"); 

        appendToFile(data); 

        Log.v("DEBUGGING", "got here 3"); 

//     myOutWriter.append(data); 
//     myOutWriter.close(); 
//     fOut.close(); 
//     Toast.makeText(getBaseContext(), 
//       "Done writing Comment File", 
//       Toast.LENGTH_SHORT).show(); 
        name.setText(""); 
        depot.setText(""); 
        date.setText(""); 
        time.setText(""); 
        location.setText(""); 
        details.setText(""); 
        outcome.setText(""); 
        did.setText(""); 
       } catch (Exception e) { 
        Toast.makeText(getBaseContext(), e.getMessage(), 
          Toast.LENGTH_SHORT).show(); 
       } 
       // write on SD card file data in the text box 

      }// onClick 
      }); // btnWriteSDFile 

     btnEmail = (Button)findViewById(R.id.Emailbtn); 
     btnEmail.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View arg0) { 
       String[] emailTo = new String[]{"[email protected]"}; 
       String subject = "Close Call Reporting"; 
       String [] filePaths= new String[1]; 
       //if(filePaths[0]==null){ 
       for(int a=0; a < filePaths.length;a++){ 
        attachedPathFile = Environment.getExternalStorageDirectory().toString()+"/Close Call Reports/"+saveName+".csv"; 
          //path+ls+saveName+"("+a+")"+".txt"; 
        filePaths[a] = attachedPathFile; 
       } 
        sendEmail(emailTo,subject,filePaths); 
      // }else{ 
       // Toast.makeText(getBaseContext(),"No Files To Email",Toast.LENGTH_LONG).show(); 
       //} 
      } 

     }); 


     resetForm = (Button)findViewById(R.id.ResetButton); 
     resetForm.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View arg0) { 
       name.setText(""); 
       depot.setText(""); 
       date.setText(""); 
       time.setText(""); 
       location.setText(""); 
       details.setText(""); 
       outcome.setText(""); 
       did.setText(""); 
      } 

     });  
} 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

     public void sendEmail(String[] emailTo, String subject, 
       String[] filePaths) { 

      Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE); 
      emailIntent.setData(Uri.parse("mailto: ")); 
      emailIntent.putExtra(Intent.EXTRA_EMAIL, emailTo); 
      emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject); 
      emailIntent.setType("message/rfc822"); 

      ArrayList<Uri> uris = new ArrayList<Uri>(); 
      for(String file: filePaths){ 
       File fileIn = new File(file); 
       Uri u = Uri.fromFile(fileIn); 
       uris.add(u); 
      } 
      //emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,uris); 
      emailIntent.putExtra(android.content.Intent.EXTRA_STREAM, uris); 
      startActivity(Intent.createChooser(emailIntent, "Email")); 
     } 

    @Override 
    public void onClick(View v) { 
    } 

    public void appendToFile (List<String> SarrayList) { 

      BufferedWriter bw = null; 
      boolean myappend = true; 
      try { 
      bw = new BufferedWriter(new FileWriter(myFile, myappend)); 
      for(String line: SarrayList) { 
      bw.write(line); 
      bw.newLine(); 
      } 
      bw.flush(); 
      } catch (IOException ioe) { 
      ioe.printStackTrace(); 
      } finally { 
      if (bw != null) try { 
      bw.close(); 
      } catch (IOException ioe2) { 
      // ignore it or write notice 
      } 
      } 

     } 

} 

답변

1

이 나에게 보이는 난 당신이 NullPointerException을 받고해야처럼 당신이 설정 될 것 같지 않는 한, 당신이 그것을 충돌이 표시되지 않는 놀랐어요 location

time = (EditText)findViewById(R.id.LocationText); 

을하지만 정확히 무슨 일을하는지 모르고 확인하기는 어렵습니다 : 또한, 당신이 ID R.id.LocationText와보기를 사용 time의 값을 설정하는 것을 잘못 보인다.

+0

나는 이것을 보면서 며칠을 보냈고 무엇이 잘못되었는지를 볼 수 없었다. 내가 필요한 모든 것이 마치 눈과 같은 것 같습니다. 나는 위치 값을 얻고 올바른 값을 얻기 위해 시간을 변경함으로써 널 포인터 예외를 수정했다. 고마워. :) – user2504297

+0

도움이 된 것을 기쁘게 생각합니다. 해결책이 만족 스럽다면 수락하는 것을 잊지 말고 답을 상향 조정하십시오. – HexAndBugs