gpt4 book ai didi

java - 将代码从 onCreate 方法中移出并移到它自己的类文件中

转载 作者:太空狗 更新时间:2023-10-29 12:54:08 25 4
gpt4 key购买 nike

我有下面的代码,我正在使用 Android java 教程。

代码都在应用程序主java文件的onCreate方法中,我想把XML处理部分移到一个单独的类中。

我尝试了几种不同的方法,但所有方法都以可怕的失败告终,并且变得越来越笨重,以至于它们不值得。

所以我的问题是,是否有一种好的/标准的方法可以将代码从主 java 文件中移出并移到一个单独的类中?

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

TextView myXmlContent = (TextView)findViewById(R.id.my_xml);
String stringXmlContent;

try {
stringXmlContent = getEventsFromAnXML(this);
myXmlContent.setText(stringXmlContent);
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

private String getEventsFromAnXML(Activity activity)
throws XmlPullParserException, IOException
{
StringBuffer stringBuffer = new StringBuffer();
Resources res = activity.getResources();
XmlResourceParser xpp = res.getXml(R.xml.myxml);
String elType = "mt";
int counter = 1;
int mainTopics = 0;
int subTopics = 0;
xpp.next();

int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT)
{
if(eventType == XmlPullParser.START_DOCUMENT)
{
stringBuffer.append("News Categories");
}
else if(eventType == XmlPullParser.START_TAG)
{
if(xpp.getName().equalsIgnoreCase("subTopic")) {
elType = "st";
subTopics += 1;
} else if(xpp.getName().equalsIgnoreCase("mainTopic")) {
elType = "mt";
mainTopics += 1;
} else {
elType = "";
}
//stringBuffer.append("\nSTART_TAG: "+xpp.getName());
}
else if(eventType == XmlPullParser.END_TAG)
{
//stringBuffer.append("\nEND_TAG: "+xpp.getName());
}
else if(eventType == XmlPullParser.TEXT)
{
if(elType.equalsIgnoreCase("st")) {
stringBuffer.append("\n *"+xpp.getText());
} else {
stringBuffer.append("\n " + counter + ") " + xpp.getText());
counter+= 1;
}
}
eventType = xpp.next();
}
//stringBuffer.append("\n--- End XML ---");
stringBuffer.append("\n Total Topics: " + mainTopics + " Total SubTopics: " + subTopics);
return stringBuffer.toString();
}

我让它工作:将它移动到另一个名为 readXML 的类中,如下所示:

        readXML processXml = new readXML();

try {
stringXmlContent = processXml.getEventsFromAnXML(this);
myXmlContent.setText(stringXmlContent);
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

我刚刚在新类中包装了方法“private String getEventsFromAnXML”

像这样:

public class readXML {

private String getEventsFromAnXML(Activity activity)
....process XML...
}

最佳答案

你应该使用抽象上下文类来做到这一点:

将您的 xml 解析器方法的参数类型更改为:

private String getEventsFromAnXML(Context ctx)
{

....
Resources res = ctx.getResources();
....

}

然后像这样从您的 Activity 中调用它:

public void onCreate(Bundle savedInstanceState) 
{

.....
ctx = this.getApplicationContext();
stringXmlContent = getEventsFromAnXML(ctx);
.....

}

希望这能奏效!

关于java - 将代码从 onCreate 方法中移出并移到它自己的类文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8730283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com