بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

خواندن و نوشتن در فایل xml

مدیریت گفتگو
توفیقی مشهود 12 سال پیش
آخرین تغییر: 12 سال پیش

با سلام من یه فایل xml دارم که تو پوشه assets ذخیره کردم میتونم از رو فایل بخونم  از طریق xmlpullparserولی وقتی تغییر میدم تو فایل ذخیره نمیشه خیلی سرچ کردم و امتحان کردم نمیشه کمکم کنید خواهشا

   public String readFeed(InputStream is) throws XmlPullParserException, IOException {
XmlPullParserFactory factory;
XmlPullParser parser = null;

factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
parser = factory.newPullParser();

parser.setInput(is, null);
String dbvar;
dbvar = new String();

int eventType = parser.getEventType();
Log.i("event", "" + eventType);

while (eventType != XmlPullParser.END_DOCUMENT)
{
String tagname = parser.getName();

switch (eventType)
{
case XmlPullParser.START_TAG:

if (tagname.equalsIgnoreCase("dbxml")) {
// create a new instance of Student
dbxml = new dbxml();
}
break;

case XmlPullParser.TEXT:
text = parser.getText();
break;

case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase("dbxml")) {
// add Student object to list
// students.add(Student);
// Student.(text);
}
else if (tagname.equalsIgnoreCase("server"))
{
dbxml.setServer(text);
Log.i("server", tagname);
}
else if (tagname.equalsIgnoreCase("db"))
{
dbxml.setDb(text);
Log.i("db", tagname);
}
else if (tagname.equalsIgnoreCase("user"))
{
dbxml.setUser(text);
Log.i("user", tagname);
}
else if (tagname.equalsIgnoreCase("pass"))
{
dbxml.setPass(text);
Log.i("pass", tagname);
}

break;

default:
break;
}
eventType = parser.next();
}

return dbvar;
}
   try {
// XmlPullParser parser = null;
xpp = new XMLPullParserHandle();
xpp.readFeed(getAssets().open("database.xml"));
  String newxmlfile = "database.xml";
//Log.i("dir", "" + outfilename);

try {
FileOutputStream fileos = openFileOutput(newxmlfile + "database.xml", Context.MODE_WORLD_WRITEABLE);
Log.i("write", "" + fileos);
XmlSerializer xmlSerializer = Xml.newSerializer();
StringWriter writer = new StringWriter();
xmlSerializer.setOutput(writer);
xmlSerializer.startDocument("UTF-8", true);
xmlSerializer.startTag("", "dbvar");
xmlSerializer.startTag("", "dbxml");
xmlSerializer.startTag("", "server");
xmlSerializer.text(sqldb.server);
Log.i("write", sqldb.server);
xmlSerializer.endTag("", "server");
xmlSerializer.startTag("", "db");
xmlSerializer.text(sqldb.db);
Log.i("write", sqldb.db);
xmlSerializer.endTag("", "db");
xmlSerializer.startTag("", "user");
xmlSerializer.text(sqldb.user);
Log.i("write", sqldb.user);
xmlSerializer.endTag("", "user");
xmlSerializer.startTag("", "pass");
xmlSerializer.text(sqldb.pass);
Log.i("write", sqldb.pass);
xmlSerializer.endTag("", "pass");
xmlSerializer.endTag("", "dbxml");
xmlSerializer.endTag("", "dbvar");
xmlSerializer.endDocument();
xmlSerializer.flush();
String dataWrite = writer.toString();
fileos.write(dataWrite.getBytes());
Log.i("writeinfile", "" + dataWrite.getBytes());
fileos.close();
xpp.readFeed(getAssets().open("database.xml"));
}

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();
}
catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


}

catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 logcat
08-12 10:44:42.651: I/server(6575): server
08-12 10:44:42.651: I/db(6575): db
08-12 10:44:42.661: I/user(6575): user
08-12 10:44:42.661: I/pass(6575): pass
08-12 10:44:42.661: I/xppkjnfdlka(6575): 10.0.2.2saa
08-12 10:44:42.661: I/LOG(6575): sql_server: 10.0.2.2, sql_db: SAHBA sql_user:sasql_pass123
08-12 10:44:42.671: I/write(6575): java.io.FileOutputStream@44f35f78
08-12 10:44:42.711: I/write(6575): 10.0.2.2
08-12 10:44:42.711: I/write(6575): SAHBA
08-12 10:44:42.711: I/write(6575): sa
08-12 10:44:42.711: I/write(6575): 123
08-12 10:44:42.711: I/writeinfile(6575): [B@44f81b98

نظرات

مجتبی یگانه 12 سال پیش
سوالتون خیلی جزئی هست ، ممکنه خیلی ها از جمله من با اون xml parser کار نکرده باشند ، پس اگه مشکلتون در نوشتن فایل یا خواندن مقدار خاصی هست ، اون رو مطرح کنید ، در ضمن آموزش rss Reader استاد رو دیدید ؟!

پاسخ‌ها 1

توفیقی مشهود 12 سال پیش

فایل xml من ابدیت نمیشه با اینکه دستورات نوشتن من درست هست !!!نه ندیدم میشه جلسه چندم؟

نظرات

طاهر 12 سال پیش
مشکل اینجاست که شما در پوشه assets میخوای بنویسی و فکر نکنم این مقدور باشه میتونی فایل رو در حافظه کپی کنی و از اونجا خواندن و نوشتن رو انجام بدی
توفیقی مشهود 12 سال پیش
منظورتون درون extenal memory بنویسم میشه یه راهنمایی کنید؟
توفیقی مشهود 12 سال پیش
این کارو هم انجام دادم java.lang.IllegalArgumentException: File /mnt/sdcard/xml-testdatabase.xml contains a path separator این خطا رو میده نتونستم حلش کنم!!
توفیقی مشهود 12 سال پیش
java.lang.IllegalArgumentException: File /mnt/sdcard/xml-testdatabase.xml contains a path separator
توفیقی مشهود 12 سال پیش
خیلی ببخشید من رمز عبور این فایل رو نمیبینم یا پیدا نمیکنم !!!
مجتبی یگانه 12 سال پیش
بیشتر دقت کنید ! ، آخرین بخش اون لینک رمز عبور فایل های فشرده هست :)
توفیقی مشهود 12 سال پیش
ببخشید من اگه بخوام اطلاعات یوزر و پسورد دیتابیس رو در xml ذخیره کنم که اگه زمانی پسورد دیتابیس تغییر کرد همون مفهومی که تو برنامه های تحت ویندوز و اس کیوال سرور هست که بعدا در xml تغییر بدیم .... آیا این طور مفهومی هم برا اپلیکیشن های موبایل هست یا نیاز هست که این کارو انجام بدم اگه اپلیکیشن رو نوشتم چطوری اون کاربر میتونه این تنظیمات رو انجام بده که پسورد دیتابیس تغییر کرده میدونم خیلی سوالم رو بد پرسیدم ولی ....
مجتبی یگانه 12 سال پیش
خواهش میکنم ، اولا که اگه از بانک SQLite استفاده می کنید ، به طور پیشفرض قابلیت استفاده از پسورد رو نداره ، اگر قصد ذخیره کردن مقدار های تکی رو دارید ، باید از xml استفاده کنید ، اما نه xml ای که خودتون ساختید ، بلکه اندورید خودش قابلیت ذخیره در xml رو با استفاده از prefrence ها که استاد آموزش دادند ، داره ( در سر فصل ها بگردید ، نگید کدم بخش ! ) اما چون این حالت امن نیست و اگه گوشی روت باشه میشه به این مقدار ها درسترسی داشت ، پس بهتره اطلاعات حساس رو به صورت کد شده ذخیره کرد ، راحت ترین روش های کد کردن پسورد MD5 یا SHA1 هست ، در موردشون تحقیق کنید :)
توفیقی مشهود 12 سال پیش
ممنون آخه من به دیتابیس اس کیو ال سرور وصل میشم و فایل xml رو در sdcard ساختم بعد کاربر اطلاعات کانکت شدن به دیتابیس رو وارد میکنه و در xml ذخیره میشه و بعد از فایل خونده میشه و مراحل کانکت شدن به دیتابیس انجام میگیره این طوری درسته؟
مجتبی یگانه 12 سال پیش
یکم امنیت برنامه زیر سوال هست ، آموزش Shared Prefrences رو ببینید :)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .