Leer / escribir en un archivo XML externo en Android
Estoy tratando de aprender más acerca de la lectura / escritura en un archivo XML (como un tipo de base de datos) en Android. Parece que no puedo encontrar nada sobre esto, así que supongo que no sé qué términos buscar.
Mi objetivo es escribir nombres de usuario y contraseñas de dos campos editText en el archivo, luego leerlos (y espero tener éxito en validarlos) más adelante cuando voy a hacer una función de inicio de sesión para mi aplicación.
- No solicite problema Window.FEATURE_ACTION_BAR
- Cómo agregar un hipervínculo a una pantalla de preferencias (PreferenceActivity)
- Android NDK r4 san-angeles problema
- Cómo agregar un texto largo con muchos párrafos en string.xml en android
- Error al analizar XML con el botón de facebook
El archivo que deseo leer / escribir está situado en un servidor, así que esto lo hace un poco complejo para mí.
Si alguien pudiera ayudarme a encontrar un tutorial sobre lectura / escritura en archivos XML, estaría muy contento.
Gracias.
- JetBrain Idea android elemento xml no está permitido aquí
- Android Lollipop Diseño del material Desbordamiento Menú Icon color
- XML para la programación de Android
- Cómo cambiar el color del texto del botón de radio en Android?
- No se puede activar el modo de vista previa Android Studio
- Permitir que TextView esté fuera de la pantalla
- El contenido de los elementos debe consistir en datos de caracteres bien formados o marcado. AndroidManifest.xml
- Atributo "vacío" no funciona como se esperaba con SimpleFramework
Aquí está el código para escribir en el archivo XML:
final String xmlFile = "userData"; String userNAme = "username"; String password = "password"; try { FileOutputStream fos = new FileOutputStream("userData.xml"); FileOutputStream fileos= getApplicationContext().openFileOutput(xmlFile, Context.MODE_PRIVATE); XmlSerializer xmlSerializer = Xml.newSerializer(); StringWriter writer = new StringWriter(); xmlSerializer.setOutput(writer); xmlSerializer.startDocument("UTF-8", true); xmlSerializer.startTag(null, "userData"); xmlSerializer.startTag(null, "userName"); xmlSerializer.text(username_String_Here); xmlSerializer.endTag(null, "userName"); xmlSerializer.startTag(null,"password"); xmlSerializer.text(password_String); xmlSerializer.endTag(null, "password"); xmlSerializer.endTag(null, "userData"); xmlSerializer.endDocument(); xmlSerializer.flush(); String dataWrite = writer.toString(); fileos.write(dataWrite.getBytes()); fileos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
Y para leer los datos del archivo XML, haga lo siguiente:
final String xmlFile = "userData"; ArrayList<String> userData = new ArrayList<String>(); try { fis = getApplicationContext().openFileInput(xmlFile); isr = new InputStreamReader(fis); inputBuffer = new char[fis.available()]; isr.read(inputBuffer); data = new String(inputBuffer); isr.close(); fis.close(); } catch (FileNotFoundException e3) { // TODO Auto-generated catch block e3.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } XmlPullParserFactory factory = null; try { factory = XmlPullParserFactory.newInstance(); } catch (XmlPullParserException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } factory.setNamespaceAware(true); XmlPullParser xpp = null; try { xpp = factory.newPullParser(); } catch (XmlPullParserException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } try { xpp.setInput(new StringReader(data)); } catch (XmlPullParserException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } int eventType = 0; try { eventType = xpp.getEventType(); } catch (XmlPullParserException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } while (eventType != XmlPullParser.END_DOCUMENT){ if (eventType == XmlPullParser.START_DOCUMENT) { System.out.println("Start document"); } else if (eventType == XmlPullParser.START_TAG) { System.out.println("Start tag "+xpp.getName()); } else if (eventType == XmlPullParser.END_TAG) { System.out.println("End tag "+xpp.getName()); } else if(eventType == XmlPullParser.TEXT) { userData.add(xpp.getText()); } try { eventType = xpp.next(); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } String userName = userData.get(0); String password = userData.get(1);
Para crear un nuevo archivo en / storage / sdcard0 / your_app_name / use lo siguiente:
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "your_app_name" + "/" + xmlFile); file.createNewFile(); FileOutputStream fileos = new FileOutputStream(file);
Public class SkillsParser implementa AssyncXmlReader {
private String ns = ""; @Override public Object parse(InputStream in) throws XmlPullParserException, IOException { try { XmlPullParser parser = Xml.newPullParser(); parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); parser.setInput(in, null); parser.nextTag(); return readSkills(parser); } finally { in.close(); } } private Object readSkills(XmlPullParser parser) throws XmlPullParserException, IOException { parser.require(XmlPullParser.START_TAG, ns, "skills"); List<ESkill> skills = new ArrayList<ESkill>(); while (parser.next() != XmlPullParser.END_TAG) { if (parser.getEventType() != XmlPullParser.START_TAG) { continue; } String name = parser.getName(); // Starts by looking for the entry tag if (name.equals("skill")) { skills.add(readSkill(parser)); } else { skip(parser); } } return skills; } private ESkill readSkill(XmlPullParser parser) throws XmlPullParserException, IOException { /* <skill> <name>Software Engineering</name> </skill> */ String skill_name = ""; while (parser.next() != XmlPullParser.END_TAG) { if (parser.getEventType() != XmlPullParser.START_TAG) { continue; } String name = parser.getName(); if ("name".equals(name)) { skill_name = readName(parser); } else { skip(parser); } } return new ESkill().setSkill(skill_name); } // Processes title tags in the feed. private String readName(XmlPullParser parser) throws IOException, XmlPullParserException { parser.require(XmlPullParser.START_TAG, ns, "name"); String description = readText(parser); parser.require(XmlPullParser.END_TAG, ns, "name"); return description; } // For the tags title and summary, extracts their text values. private String readText(XmlPullParser parser) throws IOException, XmlPullParserException { String result = ""; if (parser.next() == XmlPullParser.TEXT) { result = parser.getText(); parser.nextTag(); } return result; } private void skip(XmlPullParser parser) throws XmlPullParserException, IOException { if (parser.getEventType() != XmlPullParser.START_TAG) { throw new IllegalStateException(); } int depth = 1; while (depth != 0) { switch (parser.next()) { case XmlPullParser.END_TAG: depth--; break; case XmlPullParser.START_TAG: depth++; break; } } }
}
- API Bluetooth de Baja Energía para Jelly Bean 4.2
- Cómo explícitamente realizar la recolección de basura