2015-02-07 3 views
0

을 통해 xml 파일에 노드 및 값을 저장하는 방법 현재 실행중인 응용 프로그램에는 암호 및 전자 메일을 String 변수에 저장하는 저장 버튼이있는 두 개의 TextViews, 두 개의 TextEdit이 있습니다. xml 파일을 users.xml이라는 버튼이 눌려 졌을 때 전자 메일과 암호를 저장하고 싶습니다. (전자 메일과 암호를 String 변수에 저장하는 것 외에) 제안 사항이 있습니까?java/Android Studio

코드 :

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; 
    } 

을이 버튼을 클릭됩니다 저장 같은 것을 할 때 :

: 나는 새로운 필드가 xmlFileName라고 추가 한

//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); 

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

자세한 답장을 보내 주셔서 감사합니다. 나는 또한 XML 파일을 정확히 어디에 저장해야 하는지를 알려줄 수 있습니까? (저는 자바와 AndroidStudio에 처음 두 달이 걸렸습니다. 이제 마침내 멈추고 있습니다) –

관련 문제