您的位置:首页 > 移动开发

android 读写xml,修改appserver.xml(根据appserver.xml文件的位置进行操作)

2013-08-15 10:41 609 查看
这个例子可以独立运行,需要在res/xml中添加一个appserver.xml文件。

package com.capinfo.mobile.elena_wang;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import com.capinfo.mobile.R;
import com.capinfo.mobile.application.AppServerVO;
import com.capinfo.mobile.base.view.NewLockActivity;
import com.capinfo.mobile.exception.MSCException;
import com.capinfo.mobile.utils.MSCUtil;
import com.capinfo.mobilecore.utils.CoreConstants;

public class SystemVersionAppserver extends Activity {

ListView listview;//显示AppServer中内容
List<HashMap<String, Object>> list = null;//直接解析appserver.xml得到的内容
List<HashMap<String, Object>> listTitle = null;//存储更改的listview中的内容

boolean[] isChange;//判断是否修改了值
private SimpleAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.appserver);
setTitle("appserver");//设置页面的title

listview = (ListView)findViewById(R.id.appserver_listview);

list = new ArrayList<HashMap<String, Object>>();
listTitle  = new ArrayList<HashMap<String, Object>>();

File file = new File(CoreConstants.FILE_SYSTEM_PATH + "appserver.xml");//获取sdcard上的文件路径
//判断sdcard中是否有AppServer.xml文件
if (!file.exists()) {//证明sdcard中没有该资源文件。
getAppServer(SystemVersionAppserver.this.getResources().getXml(R.xml.appserver));
System.out.println("sdcard中没有资源文件");
saveUpdate();//往sdcard中写入appserver.xml文件。
} else {//sdcard上面有资源文件,则直接解析sdcard上的文件
pullXml();
}

adapter = new SimpleAdapter(this, listTitle,
R.layout.appserver_list, new String[] { "appName",
"appValue" }, new int[] {
R.id.appserver_list_tv,
R.id.appserver_list_et });
listview.setAdapter(adapter);

listview.setOnItemClickListener(listener);

isChange = new boolean[list.size()];//初始化isChange,先赋值为false
for(int i = 0;i<list.size();i++){
isChange[i] = false;
}

}//end onCreate()

/**listview监听item事件
*
* @author elena*/
private OnItemClickListener listener = new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View arg1, final int arg2,
long arg3) {

HashMap<String, Object> map = listTitle.get(arg2);
final String appValue = map.get("appValue").toString();

final EditText et = new EditText(SystemVersionAppserver.this);
et.setText(appValue);
et.setSingleLine(); // 设置单行显示
et.setGravity(Gravity.FILL_HORIZONTAL); // 使对话框位于屏幕的底部并居中
et.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 100));

final String appName = map.get("appName").toString();

AlertDialog dialog = new AlertDialog.Builder(SystemVersionAppserver.this).setTitle(appName).setView(et)
.setPositiveButton("确定", // 确定按钮
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
String value_2 = et.getText().toString();
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("appName", appName);
map.put("appValue", value_2);
listTitle.set(arg2, map);
adapter.notifyDataSetChanged();// 更新listview
dialog.cancel();
change(arg2);//判断是否改变list中的内容是否改变了
}
}).setNegativeButton("取消", // 取消按钮
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
dialog.cancel();
dialog.dismiss();
}
}).create();
dialog.show();

}
};

/**提示对话框,是否保存
*
* @author elena*/
public void showDialog() {
AlertDialog dialog = new AlertDialog.Builder(
SystemVersionAppserver.this)
.setTitle("是否确定保存修改的内容")
.setPositiveButton(R.string.main_b_submit,
new DialogInterface.OnClickListener() {
@Override
public void onClick(
DialogInterface paramDialogInterface,
int paramInt) {
saveUpdate();
SystemVersionAppserver.this.finish();
System.out.println("=======change===saveUpdate===");
}
})
.setNegativeButton(R.string.main_b_cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int arg1) {
System.out.println("=======change===cancel======");
dialog.cancel();
SystemVersionAppserver.this.finish();
}
}).create();
dialog.show();
}//end showDialog()

/**判断是否修改,修改了之后在退出时弹出对话框是否确定保存
*
* @author 王晨
*/
private void change(int position) {
String b = listTitle.get(position).get("appValue").toString();
if(!(list.get(position).get("appValue").toString()).equals(b)){
isChange[position] = true;
//System.out.println("====change position is===="+position);
}else{
isChange[position] = false;
}
}//end change()

/**
* 解析SDcard文件函数
*
* @author elena
*/
private void pullXml() {
list.clear();
listTitle.clear();
String path = CoreConstants.FILE_SYSTEM_PATH + "appserver.xml";
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(Thread.currentThread().getContextClassLoader()
.getResourceAsStream(path), "UTF-8");

int type = parser.getEventType();// 获取事件类型
while (type != XmlPullParser.END_DOCUMENT) {
if (type == XmlPullParser.START_TAG) {
String tagName = parser.getName();
if (tagName.equals("app")) {
HashMap<String, Object> map = new HashMap<String, Object>();
String appName = parser.getAttributeValue(0);
map.put("appName", appName);
String appValue = parser.getAttributeValue(1);
map.put("appValue", appValue);
list.add(map);
listTitle.add(map);
}
}
type = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}//end pullxml()

/** 保存修改后的内容
*
* @author elena */
public void saveUpdate() {
System.out.println("===------save  update-------====");
StringBuffer str = new StringBuffer();
str.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ "<resources>");
for(int i = 0;i<listTitle.size();i++){
String a = listTitle.get(i).get("appName").toString();
String b = listTitle.get(i).get("appValue").toString();
b = b.replace("&", "&");//将b中含有“&”的位置改为“&”的方法用后面的字符串代替前面的字符串
str.append(" <app ").append("id=\""+a+"\" ").append("value=\""+b+"\" ").append("/>");
}
str.append("</resources>");

String file_path = CoreConstants.FILE_SYSTEM_PATH + "appserver.xml";
File file = new File(file_path);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
fos.write(str.toString().getBytes());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}//end saveUpdate()

/**
* 读取res/xml下资源文件
*
* @author elena
*
* @param xrp
*            XmlResourceParser
* @return 服务器信息
*/
public void getAppServer(final XmlResourceParser xrp) {
try {
list.clear();
listTitle.clear();

while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) {
if (xrp.getEventType() == XmlResourceParser.START_TAG) {
String s = xrp.getName();

if (s.equals("app")) {
String id = xrp.getAttributeValue(null, "id");
String value = xrp.getAttributeValue(null, "value");
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("appName", id);
map.put("appValue", value);
list.add(map);
listTitle.add(map);
}
}
xrp.next();
}
} catch (Exception e) {
MSCException.show("Constants.getAppServer error ! ", e);
} finally {
xrp.close();
}
}

/**
* 捕捉返回按钮事件
*
* @author elena
*
* @param keyCode
*            按键编码
* @param event
*            按键事件
* @return true
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 是否触发按键为back键
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
for(int i=0;i<list.size();i++){
if(isChange[i] == true){
showDialog();
return true;
}
}
return super.onKeyDown(keyCode, event);
} else {
return super.onKeyDown(keyCode, event);
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android XML
相关文章推荐