2015-02-07 56 views
0

當前運行的應用程序有兩個TextViews,兩個TextEdits,帶有一個保存按鈕,可將密碼和電子郵件保存爲字符串變量。我有一個名爲users.xml的xml文件,當按下按鈕時,我想保存電子郵件和密碼(除了將電子郵件和密碼保存爲字符串變量) 有什麼建議嗎?如何通過java/Android Studio將節點和值保存到xml文件中

代碼:

package com.example.ashwinpraveen1.domdoc; 

import android.content.res.AssetManager; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

import org.w3c.dom.Document; 
import org.w3c.dom.NodeList; 
import org.xml.sax.InputSource; 

import java.io.InputStream; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 


public class MainActivity extends ActionBarActivity { 

    TextView printText; 
    EditText emailEdit, passwordEdit; 
    Button saveButton; 
    String email,password; 

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

     final EditText emailEdit = (EditText) findViewById(R.id.emailEdit); 
     final EditText passwordEdit = (EditText) findViewById(R.id.passwordEdit); 
     Button saveButton = (Button) findViewById(R.id.saveButton); 

     Document xmlDoc = getDocument(); 
     final TextView printText = (TextView) findViewById(R.id.printText); 
     // checking if I can retrieve the root node 
     printText.setText(xmlDoc.getDocumentElement().getNodeName()); 


     saveButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       email = emailEdit.getText().toString(); 
       password = passwordEdit.getText().toString(); 
       if (email.isEmpty() || password.isEmpty()) { 
        //code when the user presses the "save" button for no reason 
       } 
      } 
     }); 




      } 

      private Document getDocument() { 
       try { 
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
        factory.setIgnoringComments(true); 
        factory.setIgnoringElementContentWhitespace(true); 
        //factory.setValidating(true); 

        DocumentBuilder builder = factory.newDocumentBuilder(); 
        AssetManager assetManager = this.getAssets(); 
        InputStream is = assetManager.open("users.xml"); 

        InputSource inStream = new InputSource(is); 
        return builder.parse(inStream); 

       } 
       catch(Exception e) { 
        TextView printText = (TextView) findViewById(R.id.printText); 
        printText.setText(e.getMessage()); 
        return null; 
       } 
      } 



    } 

users.xml中:

<?xml version="1.0" encoding="UTF-8"?> 

<list> 
    <users> 
     <user1>Bob</user1> 
     <pass1>BobNeedsHelpWithxml</pass1> 
    </users> 
    <users> 
     <user2>Ash</user2> 
     <pass2>AshNeedsHelpToo</pass2> 
    </users> 
</list> 

回答

0

我首先建議改變你的xml文件,看起來像這樣:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<users> 
    <user> 
     <username>Bob</username> 
     <password>BobNeedsHelpWithxml</password> 
    </user> 
    <user> 
     <username>Ash</username> 
     <password>AshNeedsHelpToo</password> 
    </user> 
</users> 

的標籤<user1><user2>, ...,<userN>沒有任何意義。如果您需要將ID與每個用戶相關聯,請改爲使用<user id = "1">,<user id = "2">,...,<user id = "N">

然後,請記住資產目錄中的文件是隻讀的,因此請勿將xml文件放在那裏;內部存儲很好。 的getDocument()方法現在看起來是這樣的:

private Document getDocument() { 
     Document d = null; 
     try { 
      FileInputStream f = openFileInput(xmlFileName); 

      DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
      d = dBuilder.parse(f); 
     } catch (ParserConfigurationException | IOException | SAXException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return d; 
    } 

當按鈕被點擊保存,做這樣的事情:

//append new user 
Element users = xmlDoc.getDocumentElement(); 

Element newUser = xmlDoc.createElement("user"); 

Element newUsername = xmlDoc.createElement("username"); 
Element newPassword = xmlDoc.createElement("password"); 

newUsername.appendChild(xmlDoc.createTextNode(email)); 
newPassword.appendChild(xmlDoc.createTextNode(password)); 

newUser.appendChild(newUsername); 
newUser.appendChild(newPassword); 

users.appendChild(newUser); 

//save to file 
DOMSource source = new DOMSource(xmlDoc); 
TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
Transformer transformer = transformerFactory.newTransformer(); 
StreamResult result = new StreamResult(openFileOutput(xmlFileName, Context.MODE_PRIVATE)); 
transformer.transform(source, result); 

請注意,我添加了一個新的領域被稱爲xmlFileName

static final String xmlFileName = "users.xml"; 
+0

謝謝你的詳細回覆。我將進行更改,還可以告訴我我應該在哪裏保存xml文件? (我是新來的java和AndroidStudio已經兩個月了,我終於得到了它的一個掛) – 2015-02-08 11:56:14

相關問題