2014-02-17 76 views
1

我试图从多个文本框的文本保存到一个文件本身安排表中的如何将EditText中的文本保存为Android中的表格文本文件?

例如:

学生:...
类:...
商标:

 
Student    Class   Marks 

....     ....   .... 

....     ....   .... 

每次它保存,新的行应该是一个新的学生创建:...

这应该被保存。 ...

这是可能的文本文件? 如果不是,我还能如何做到这一点?

此外,活动应该显示这个表....如果可能的话

我的代码是:

public class Save extends Activity implements SwipeInterface, OnFocusChangeListener { 
Double marks = 0.0; 
EditText et1 = (EditText) findViewById(R.id.roll_no); 
EditText et2 = (EditText) findViewById(R.id.name); 
EditText et3 = (EditText) findViewById(R.id.grade); 
EditText et4 = (EditText) findViewById(R.id.subject); 
EditText et5 = (EditText) findViewById(R.id.marks); 
EditText et6 = (EditText) findViewById(R.id.filename); 
.... 
ActivitySwipeDetector swipe = new ActivitySwipeDetector(this, this); 
    RelativeLayout swipe_layout = (RelativeLayout) findViewById(R.id.Save_port); 
    swipe_layout.setOnTouchListener(swipe); 

    Intent receiveIntent = this.getIntent(); 
    Double e3 = receiveIntent.getDoubleExtra("DoubleValue_e3", 0.00); 
    marks = e3; 
    EditText ebar = (EditText) findViewById(R.id.marks); 
    ebar.setText(marks.toString()); 

    et3.setOnFocusChangeListener((OnFocusChangeListener)this); 
    try{ 
     File dir = new File("/mnt/sdcard/Teacher's Aid/"); 

     if (!dir.exists()) { 
      dir.mkdir(); 
      } 

    }catch (Exception e) { 
     // TODO: handle exception 
     e.printStackTrace(); 
    } 
} 
.... 
public void butt_save(View view) 
{ 
    try { 
     String row = et1.getText().toString() + "," + et2.getText().toString() + "," + et3.getText().toString() + "," + et4.getText().toString() + "," + et5.getText().toString() + "\n"; 
     File myFile = new File("/mnt/sdcard/Teacher's Aid/" + et6.getText().toString() + ".csv"); 
    if (!myFile.exists()) { 
      myFile.createNewFile(); 
      FileOutputStream fOut = new FileOutputStream(myFile.getAbsoluteFile(),true); 
      OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut); 


        //Write the header : in your case it is : Student class Marsk (only one time) 
      myOutWriter 
      .write("Roll no,Name,Grade,Subject,Marks"+"\n"); 

      myOutWriter.close(); 
    } 
    FileOutputStream fOut = new FileOutputStream(myFile.getAbsoluteFile(),true); 
    OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut); 

       //write to CSV 
    myOutWriter.write(row); 
    myOutWriter.close(); 
    Toast.makeText(getApplication(), "Sucessful",Toast.LENGTH_LONG).show(); 

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

@Override 
public void onFocusChange(View v, boolean hasFocus) { 
    if(!hasFocus) 
    { 
     et6.setText("Class " + et3.getText().toString()); 

} 

}} 

然而,这甚至不开......当我走的这主要活动,你的应用程序崩溃.... 的logcat的显示...

02-20 05:53:38.581: E/AndroidRuntime(1664): FATAL EXCEPTION: main 
02-20 05:53:38.581: E/AndroidRuntime(1664): Process: com.Candy.teacher, PID: 1664 
02-20 05:53:38.581: E/AndroidRuntime(1664): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.Candy.teacher/com.Candy.teacher.Save}: java.lang.NullPointerException 
02-20 05:53:38.581: E/AndroidRuntime(1664):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2102) 
02-20 05:53:38.581: E/AndroidRuntime(1664):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226) 
02-20 05:53:38.581: E/AndroidRuntime(1664):  at android.app.ActivityThread.access$700(ActivityThread.java:135) 
02-20 05:53:38.581: E/AndroidRuntime(1664):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397) 
02-20 05:53:38.581: E/AndroidRuntime(1664):  at android.os.Handler.dispatchMessage(Handler.java:102) 
02-20 05:53:38.581: E/AndroidRuntime(1664):  at android.os.Looper.loop(Looper.java:137) 
02-20 05:53:38.581: E/AndroidRuntime(1664):  at android.app.ActivityThread.main(ActivityThread.java:4998) 
02-20 05:53:38.581: E/AndroidRuntime(1664):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-20 05:53:38.581: E/AndroidRuntime(1664):  at java.lang.reflect.Method.invoke(Method.java:515) 
02-20 05:53:38.581: E/AndroidRuntime(1664):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777) 
02-20 05:53:38.581: E/AndroidRuntime(1664):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593) 
02-20 05:53:38.581: E/AndroidRuntime(1664):  at dalvik.system.NativeStart.main(Native Method) 
02-20 05:53:38.581: E/AndroidRuntime(1664): Caused by: java.lang.NullPointerException 
02-20 05:53:38.581: E/AndroidRuntime(1664):  at android.app.Activity.findViewById(Activity.java:1883) 
02-20 05:53:38.581: E/AndroidRuntime(1664):  at com.Candy.teacher.Save.<init>(Save.java:15) 
02-20 05:53:38.581: E/AndroidRuntime(1664):  at java.lang.Class.newInstanceImpl(Native Method) 
02-20 05:53:38.581: E/AndroidRuntime(1664):  at java.lang.Class.newInstance(Class.java:1208) 
02-20 05:53:38.581: E/AndroidRuntime(1664):  at android.app.Instrumentation.newActivity(Instrumentation.java:1061) 
02-20 05:53:38.581: E/AndroidRuntime(1664):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2093) 
02-20 05:53:38.581: E/AndroidRuntime(1664):  ... 11 more 
02-20 05:53:50.241: I/Process(1664): Sending signal. PID: 1664 SIG: 9 
+0

您可以使用sqlite databse – Sonali8890

+0

到目前为止其非常简单,您可以将其保存为txt文件。你目前的进展如何?任何代码? – SMR

+0

你想保存为sdcard中的.csv文件吗?或者你想在活动中显示表格视图? –

回答

1

如果你想存储在SD卡.csv文件,请尝试以下代码

try{ 

     File dir = new File("/mnt/sdcard/MyApp/"); 

     if (!dir.exists()) { 
      dir.mkdir(); 
      System.out.println("Directory created"); 
      } 
     //ceate .csv file with header 
     myFile = new File("/mnt/sdcard/MyApp/Student.csv"); 

     if (!myFile.exists()) { 
      myFile.createNewFile(); 
      System.out.println("File created"); 
     } 

     fOut = new FileOutputStream(myFile.getAbsoluteFile(),true); 
     myOutWriter = new OutputStreamWriter(fOut); 


       //Write the header : in your case it is : Student class Marsk (only one time) 
     myOutWriter 
     .write("Student,class,Marks"+"\n"); 

     myOutWriter.flush(); 

    }catch (Exception e) { 
     // TODO: handle exception 
     e.printStackTrace(); 
    } 

当你想要写新行:

  try { 
      String row = studentname + "," + studentclass + "," + studentmarks + "\n"; 
     myFile = new File("/mnt/sdcard/MyApp/Student.csv"); 
     if (!myFile.exists()) { 
       myFile.createNewFile(); 
     } 
     fOut = new FileOutputStream(myFile.getAbsoluteFile(),true); 
     myOutWriter = new OutputStreamWriter(fOut); 

        //write to CSV 
     myOutWriter.write(row); 
     myOutWriter.flush(); 
     System.out.println("write to student csv ....."); 

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

现在检查你的SD卡/MyApp/Student.csv文件

+0

该行 myOutWriter.write(outlet +“\ n”); 给出一个错误,因为没有声明出口,它究竟是什么? –

+0

@GauthamVinod我编辑了我的答案.check now –

+0

我更新了我的问题,你可以看看它吗? –

2

首先包括权限:

android.permission.WRITE_EXTERNAL_STORAGE 

你将不得不使用FileOutputStream中:

File externalStorageDir = Environment.getExternalStorageDirectory(); 
File myFile = new File(externalStorageDir , "mysdfile.txt"); 

if(myFile.exists()) 
{ 
    try 
    { 
     FileOutputStream fOut = new FileOutputStream(myFile); 
     OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut); 
     myOutWriter.append(string); 
     myOutWriter.close(); 
     fOut.close(); 
    } catch(Exception e) 
     { 

     } 
} 
else 
    { 
    myFile.createNewFile(); 
    } 

写入字符串到文件之前将字符串为了要店铺的细节:

StringBuffer string = new StringBuffer(); 

然后你可以SIM卡层使用:

string.append(editText1.getText()); 
string.append(" ; "); 
string.append(editText2.getText()); 
string.append(" ; "); 
string.append(editText3.getText()); 
+1

我觉得你需要在联系多个文本时添加一些分隔符,比如';'。否则,当您想要检索相同的存储文本时,将很难或不可能。 – user3317558

+0

是的,我忘了补充一点! –

+0

我应该将它添加到您的答案吗? – user3317558

相关问题