آموزش Parse(تجزیه) Xml از سرور در اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش Parse(تجزیه) Xml از سرور در اندروید می پردازیم در آموزش قبلی Parse(تجزیه) xml را از پوشه assets قرار دادیم در این آموزش به Parse(تجزیه) Xml از سرور می پردازیم و نحوه کار به این شکل است که ابتدا داده Xml از سرور دریافت می شود سپس آن را Parse یا تجزیه می کنیم ر ادامه با ما همراه باشید تا نحوه Parse(تجزیه) Xml از سرور در اندروید را یاد گیرید.
از لینک زیر می توانید به آموزش قبلی پارس Xml در اندروید استفاده کنید.
آموزش parse (تجزیه) XML در برنامه نویسی اندروید
کد بالا کار ما را راحتر خواهد کرد چندین متد مختلف برای گرفتن نودها گرفتن فایل xml از سرور وجود دارد.
ما دوتا اکتیویتی داریم یک اکتیویتی که List است و آیتم های پارس شده را نشان میدهد و اکتیویتی دوم هم با کلیک بروی هر آیتم اطلاعات مربوط به آن را در اکتیویتی دیگر نمایش داده می شود.
یک فایل به نام list_item.xml در layout ایجاد کنید و کدهای زیر را در آن قرار دهید (شکل آیتم های List را تعیین می کند)
کد بالا شکل ظاهری هر آیتم List را ایجاد می کند.
یک فایل به نام activity_main.xml ایجاد کنید و کدهای زیر را در آن قرار دهید.
این کد layout اصلی است که یک ListView در آن قرار گرفته است.
حالا باید یک اکتیویتی به نام MainActivity.java ایحاد کنید و کدهای زیر را در آن قرار دهید.
در بالا ما یکسری متغیر تعریف کردیم که node های ما در xml دریافت شده خواهند ما باید بر اساس هر node بیایم داده ها را parse کنیم ابتدا با استفاده از متد getXmlFromUrl که خودمان نوشتیم فایل را از سرور می خوانیم بعد از این کار میایم آرایه از Hashmap ایجاد می کنیم سپس یک آداپتور از نوع List درست می کنیم و به ListView می دهیم.
در بالا ممکن است SingleMenuItemActivity خطا دهد چون هنوز این اکتیویتی را ایجاد نکرده اید.
یک layout به نام single_list_item.xml ایجاد کنید و کدهای زیر را در آن قرار دهید.
بعد از انتخاب هر آیتم از Listview اطلاعات از آن اکتیویتی به این اکتیویتی فرستاده می شود.
و در آخر کد مربوط به اکتیویتی آن همانند زیر خواهد بود یک اکتیویتی به نام SingleMenuItemActivity.java ایجاد کنید و کدهای زیر را در آن قرار دهید.
در اینجا اطلاعات فرستاده از اکتیویتی قبل را گرفته و نمایش میدهیم.
این آموزش هم به پایان رسید.
موفق باشید.
سلام
ممنون از آموزش خوبتون
من این کد رو در یک فرگمنت اجرا کردم ولی در اجرای getFrotmXMLParser به خطای network main thread exception بر خورد کردم
مجوز اینترنت رو هم در مانیفست و runtime permition قرار دادم.
مشکل کجاست؟
// Required empty public constructor
}
static final String URL = “http://programchi.ir/api/Xml_data.xml”;
static final String KEY_ITEM = “item”;
static final String KEY_ID = “id”;
static final String KEY_NAME = “name”;
static final String KEY_COST = “cost”;
static final String KEY_DESC = “description”;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.activity_maps, container, false);
ArrayList<HashMap> menuItems = new ArrayList<HashMap>();
XMLParser parser = new XMLParser();
try {
String xml = parser.getXmlFromUrl(URL);
Document doc = parser.getDomElement(xml);
NodeList nl = doc.getElementsByTagName(KEY_ITEM);
for (int i = 0; i < nl.getLength(); i++) {
HashMap map = new HashMap();
Element e = (Element) nl.item(i);
map.put(KEY_ID, parser.getValue(e, KEY_ID));
map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
map.put(KEY_COST, “Rs.” + parser.getValue(e, KEY_COST));
map.put(KEY_DESC, parser.getValue(e, KEY_DESC));
menuItems.add(map);
}
}catch (Exception e){
String string = e.toString();
}
ListAdapter adapter = new SimpleAdapter(getActivity(), menuItems,
R.layout.list_item,
new String[] { KEY_NAME, KEY_DESC, KEY_COST }, new int[] {
R.id.name, R.id.desciption, R.id.cost });
ListView listView = (ListView) view.findViewById(R.id.list);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view,
int position, long id) {
String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
String cost = ((TextView) view.findViewById(R.id.cost)).getText().toString();
String description = ((TextView) view.findViewById(R.id.desciption)).getText().toString();
/**Intent in = new Intent(getContext(), SingleMenuItemActivity.class);
in.putExtra(KEY_NAME, name);
in.putExtra(KEY_COST, cost);
in.putExtra(KEY_DESC, description);
startActivity(in);
*/
}
});
return view;
}
}
سلام مجدد
مشکل قبلی رفع شد
یه سوال دیگه
اگر xml داده های فارسی داشته باشه چظور باید نمایش داده شه؟
کافیه مثل زیر عمل parse رو انجام دهید.
موفق باشید.
سلام.. میشه منو زاهنمایی کنید که چگونه میشه به اطلاعات بیشتری از سایت لرزه نگاری دست یافت؟ تمام اپلیکیشن های مربوط به زلزله منبع خودشون رو سایت مرکز لرزهنگاری کشوری معرفی کردن ولی من تو لینکی که سایت ارئه داده بیشتر از 20 آیتم نتونستم پیدا کنم 🙁
http://irsc.ut.ac.ir/events_list_fa.xml