【问题标题】:using sax as getter and setter使用 sax 作为 getter 和 setter
【发布时间】:2016-05-19 18:16:35
【问题描述】:

我需要使用 sax 解析器在 android 上获取多个按钮名称并将其保存在一个文件中,并且在某些情况下,如果我确实对按钮文本进行了任何应该设置(加载)的更改。 例如:

Button1文字是:生活是美好的; Button2文字是:生活不好

"Button1, life is good; Button2, life is not good" 应该保存在 log.txt 中。 如果我在该 log.txt 文件中进行任何更改,例如(可能进行更新):“Button1,life 相当好;Button2,life not wellcome”,而不是

Button1文字是:生活还不错; Button2文字为:生活不顺利

所以,我怎样才能使它工作,谢谢。

【问题讨论】:

  • 这只是原始样本,更大。
  • 你的文件有多大?
  • 目前大概有30个按钮,有可能超过100个。

标签: android xml parsing sax


【解决方案1】:

有一种更简单的方法可以做到这一点:您可以使用字符串资源。 String Resources | Android Developers

<resources>
    <string name="life_is_x">Life is %s</string>
    <string name="good">good</string>
    <string name="not_good">not good</string>
    <string name="quite_good">quite good</string>
</resources>

在您的布局 XML 中,您不需要在按钮上为属性 android:text 设置值(尽管如果您指定 tools:text,则该值将仅显示在 Android Studio 图形布局设计器中,而不会显示在您的应用中,这对设计很有用。)

然后在你的代码中:

    Context context = button.getContext();
    String lifeStr;
    switch (lifeEnum) {
    case GOOD:
        lifeStr = context.getString(R.string.good);
        break;
    case NOT_GOOD:
        lifeStr = context.getString(R.string.not_good);
        break;
    case QUITE_GOOD:
        lifeStr = context.getString(R.string.quite_good);
        break;
    }
    String title = context.getString(R.string.life_is_x, lifeStr);
    // lifeStr will replace the %s placeholder in life_is_x
    button.setText(title);

【讨论】:

  • 感谢您的回答,但我已经准备好使用资源文件了。问题是我需要编写程序来记住最后的文本,并且也可以在文本上进行更改,对此有什么想法吗?
  • 您是指在设备上的 Android 应用程序中,还是在开发期间的独立 Java 程序中?
  • 我的意思是安卓设备。因此,我认为 sax xml setter to file 可能会帮助我存储带有按钮 ID 的最后一个文本,并且在任何情况下,例如程序重新启动,如果存在,则可以加载按钮文本。有什么线索吗?
  • 事情是这样的:您在 XML 中指定所有这些资源,例如布局、字符串和可绘制对象,但是这些资源会以机器格式编译到应用程序中,因此您无法使用 XML 解析它们解析器。无论您尝试做什么,您都可以使用字符串资源和一些运行时逻辑来完成。
  • 我想如果我可以创建一个带有适当标签的本地 xml 文件来存储我的变量,这是有可能实现的。
【解决方案2】:

我已经用 jdom 解析器解决了我的问题,实际上我使用了这个站点:http://www.tutorialspoint.com/java_xml/java_jdom_parse_document.htm 还有这个创建 xml 文件的链接:http://www.tutorialspoint.com/java_xml/java_dom_create_document.htm。谢谢你给我的想法。我建议任何想在本地 android 设备中使用 xml 操作的人都应该看看http://www.tutorialspoint.com/java_xml/。您可能会找到任何类型的 xml 示例..

<?xml version="1.0"?>
<class>
   <student rollno="393">
      <firstname>dinkar</firstname>
      <lastname>kad</lastname>
      <nickname>dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno="493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno="593">
      <firstname>jasvir</firstname>
      <lastname>singn</lastname>
      <nickname>jazz</nickname>
      <marks>90</marks>
   </student>
</class>


import java.io.File;
import java.io.IOException;
import java.util.List;

import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;

public class JDomParserDemo {
   public static void main(String[] args) {
      try {
         File inputFile = new File("input.txt");

         SAXBuilder saxBuilder = new SAXBuilder();

         Document document = saxBuilder.build(inputFile);

         System.out.println("Root element :" 
            + document.getRootElement().getName());

         Element classElement = document.getRootElement();

         List<Element> studentList = classElement.getChildren();
         System.out.println("----------------------------");

         for (int temp = 0; temp < studentList.size(); temp++) {    
            Element student = studentList.get(temp);
            System.out.println("\nCurrent Element :" 
               + student.getName());
            Attribute attribute =  student.getAttribute("rollno");
            System.out.println("Student roll no : " 
               + attribute.getValue() );
            System.out.println("First Name : " + student.getChild("firstname").getText());
            System.out.println("Last Name : "+ student.getChild("lastname").getText());
            System.out.println("Nick Name : "+ student.getChild("nickname").getText());
            System.out.println("Marks : "+ student.getChild("marks").getText());                        
         }
      }catch(JDOMException e){
         e.printStackTrace();
      }catch(IOException ioe){
         ioe.printStackTrace();
      }
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 2018-03-11
    • 2014-03-19
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    相关资源
    最近更新 更多