사용자가 여러 '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
}
}
}
}
나는 이것을 보면서 며칠을 보냈고 무엇이 잘못되었는지를 볼 수 없었다. 내가 필요한 모든 것이 마치 눈과 같은 것 같습니다. 나는 위치 값을 얻고 올바른 값을 얻기 위해 시간을 변경함으로써 널 포인터 예외를 수정했다. 고마워. :) – user2504297
도움이 된 것을 기쁘게 생각합니다. 해결책이 만족 스럽다면 수락하는 것을 잊지 말고 답을 상향 조정하십시오. – HexAndBugs