在写入.csv之前检查重复的editText

时间:2014-01-11 23:56:41

标签: android database csv

我的FirstActivity for CSV中有几个editText:

Button save;
CSV csv;
StringBuffer filePathc;

public final static String EXTRA_MESSAGE = "com.example.mapcard.MESSAGE";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_card);

txtName= (EditText) findViewById(R.id.txtName);
txtCompany= (EditText) findViewById(R.id.txtCompany);
txtPhone= (EditText) findViewById(R.id.txtPhone);
txtMobile = (EditText) findViewById(R.id.txtMobile);
txtAddress = (EditText) findViewById(R.id.txtAddress);
txtEmail = (EditText) findViewById(R.id.txtEmail);
txtWebsite = (EditText) findViewById(R.id.txtWebsite);
txtTitle = (EditText) findViewById(R.id.txtTitle);

filePathc = new StringBuffer();
filePathc.append("/sdcard/Android/data/");
file = new File(filePathc+filename.toString());
csv = new CSV(file);

save=(Button)findViewById(R.id.save);
save.setOnClickListener(new View.OnClickListener() {

@Override   
public void onClick(View v) {

csv.writeHeader(txtName.getText().toString()+ "," 
                        +txtCompany.getText().toString()
                        + "," +txtPhone.getText().toString()
                        + "," +txtMobile.getText().toString()
                        + "," +txtAddress.getText().toString()
                        + "," +txtEmail.getText().toString()
                        + "," +txtWebsite.getText().toString()
                        + "," +txtTitle.getText().toString());

Intent intent = new Intent(NewCard.this, Template.class);

intent.putExtra("name", Name);
intent.putExtra("company", Company);
intent.putExtra("phone", Phone);        
intent.putExtra("mobile", Mobile);
intent.putExtra("address", Address);
intent.putExtra("email", Email);
intent.putExtra("website", Website);
intent.putExtra("title", Title);

startActivity(intent);

SecondActivity是将此数据写入.csv文件:

public class CSV {
private PrintWriter csvWriter;    
private File file;

public CSV(File file) {
this.file = file;
}

public void writeHeader(String data) {

try {
    if (data != null) {

        csvWriter = new PrintWriter(new FileWriter(file, true));
        csvWriter.print("\r\n"+",");
        csvWriter.print(data);
        csvWriter.close();

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

目录中的文件已成功创建并插入了数据。我正在尝试检查名称或电子邮件等数据,如果它是重复/已经记录到不保存到.csv并警告用户使用Toast“相同数据”。

我认为这与行有关:

try {
    if (data != null) {

感谢您的帮助和建议。谢谢。

2 个答案:

答案 0 :(得分:1)

data != null并不涵盖String只是空的情况,但不是null。所以基本上你通过调用""从textview获得getText()。添加&& !"".equals(data)应解决该问题

<强>更新

嗯,空格和未初始化的字符串之间存在差异。未经初始化的字符串意味着您将其声明为String a;,但没有进一步说明。

如果使用editText.getText(),editText将返回一个已初始化但仅包含当前内容的String。所以基本上如果editext中没有任何内容,它将返回&#34;&#34;。

总结一下:

String a;
null == "" // false
a == null // true
"".equals(editText.getTExt()) // true if the editext doesnt contain anything

答案 1 :(得分:1)

使用以下功能

public boolean exist(String newData){
   try {
        FileInputStream fIn = new FileInputStream(file);
        BufferedReader myReader = new BufferedReader(
                new InputStreamReader(fIn));
        String aDataRow = "";
        String aBuffer = "";
        while ((aDataRow = myReader.readLine()) != null) {
            if(aDataRow.contains(newData))//<--check if data exists
               return true;
        }
        txtData.setText(aBuffer);
        myReader.close();

    } catch (Exception e) {

    }
    return false;
}

并将您的写标题功能更改为:

public void writeHeader(String data) {

try {
    if (data != null&&!data.isEmpty()&&!exist(data)) {

        csvWriter = new PrintWriter(new FileWriter(file, true));
        csvWriter.print("\r\n"+",");
        csvWriter.print(data);
        csvWriter.close();

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