Android的ListFragment(福尔摩斯)从URL xml解析 [英] Android ListFragment (sherlock) xml parsing from url
本文介绍了Android的ListFragment(福尔摩斯)从URL xml解析的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有问题SherlockListFtagment和XML解析器。在ListActivitiy与AsyncTask的工作,并没有有问题。我需要编辑上ListFragment工作。
code:
公共类AndroidFragment扩展SherlockListFragment {
静态最终字符串URL =HTTP:// ...;
// XML节点键
静态最后弦乐KEY_ITEM =novost; //父节点
//静态最后弦乐KEY_ID =ID;
静态最后弦乐KEY_NAME =naslov;
静态最后弦乐KEY_COST =数据;
静态最后弦乐KEY_DESC =文本;
静态最后弦乐KEY_LINK =联系;
静态最后弦乐KEY_LINK1 =DOC;
ArrayList的<&HashMap的LT;字符串,字符串>>菜单项; @覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
捆绑savedInstanceState){ 查看查看= inflater.inflate(R.layout.activity_main,NULL);
Log.w(Aplikacija_view,Startovana);
返回视图。 }
@覆盖
公共无效onResume(){
Log.w(Aplikacija_resume,Startovana);
新loadListView()执行(); } 公共类loadListView扩展的AsyncTask<整数,字符串,字符串>
{
@覆盖保护无效于preExecute()
{ Toast.makeText(getActivity(),Ucitavanje ...,Toast.LENGTH_LONG).show(); super.on preExecute();
}
@覆盖保护字符串doInBackground(整数参数... args)
{//更新从后台线程UI
菜单项=新的ArrayList<&HashMap的LT;字符串,字符串>>();
最后XMLParser的解析器=新XMLParser的();
字符串XML = parser.getXmlFromUrl(URL); //获取XML
文档的文档= parser.getDomElement(XML); //获得DOM元素 节点列表NL = doc.getElementsByTagName(KEY_ITEM);
项目> //遍历所有项目节点&LT循环;
的for(int i = 0; I< nl.getLength();我++){
//创建新的HashMap
HashMap的<字符串,字符串>地图=新的HashMap<字符串,字符串>();
元素e =(元)nl.item(I)
//将每个子节点的HashMap键=>值 map.put(KEY_NAME,parser.getValue(即KEY_NAME));
map.put(KEY_COST,原点+ parser.getValue(即KEY_COST));
map.put(KEY_DESC,parser.getValue(即KEY_DESC));
map.put(KEY_LINK,parser.getValue(即KEY_LINK));
map.put(KEY_LINK1,parser.getValue(即KEY_LINK1)); //添加HashList到ArrayList的
menuItems.add(地图); } 返回null;
}
@覆盖保护无效onPostExecute(字符串参数)
{
Toast.makeText(getActivity(),Ucitano,Toast.LENGTH_LONG).show();
的String [] =从{KEY_NAME,KEY_DESC,KEY_COST,KEY_LINK,KEY_LINK1}; / **的意见listview_layout IDS * /
INT []为= {R.id.naslov,R.id.novost,R.id.datum,R.id.link,R.id.link1}; //实例化一个适配器来存储每个项目
// R.layout.listview_layout定义每个项目的布局
SimpleAdapter适配器=新SimpleAdapter(getActivity()getBaseContext(),菜单项,R.layout.listview_layout,从,到); //适配器设置到ListView
setListAdapter(适配器); }
}
}
应用程序正在被百达creshed。我需要修改?
的**的 * 的**** 更新日志的 * **的 * 的**的 * 的**的 * 的**的 * 的
03-19 23:44:40.203:W / Aplikacija_view(30386):Startovana
03-19 23:44:40.233:W / Aplikacija_resume(30386):Startovana
03-19 23:44:40.243:W /资产(30386):从深重定向0x01030046失败=> 0x0a07000c,defStyleAttr = 0x01010084,defStyleRes = 0x0103008f,风格= 00000000
03-19 23:44:40.243:W /资产(30386):从深重定向0x01030046失败=> 0x0a07000c,defStyleAttr = 0x01010084,defStyleRes = 0x0103008f,风格= 00000000
03-19 23:44:40.413:D / AndroidRuntime(30386):关闭VM
03-19 23:44:40.413:W / dalvikvm(30386):主题ID = 1:螺纹未捕获的异常退出(组= 0x4200fa08)
03-19 23:44:40.423:E / AndroidRuntime(30386):致命异常:主要
03-19 23:44:40.423:E / AndroidRuntime(30386):了java.lang.RuntimeException:无法恢复活动{in.wptrafficanalyzer.actionbarsherlocknavtabwithimages/in.wptrafficanalyzer.actionbarsherlocknavtabwithimages.MainActivity}: android.support.v4.app.SuperNotCalledException:片段AndroidFragment {42678970#0 ID = 0x1020002安卓}没有通过调用super.onResume()
03-19 23:44:40.423:E / AndroidRuntime(30386):在android.app.ActivityThread.performResumeActivity(ActivityThread.java:2875)
03-19 23:44:40.423:E / AndroidRuntime(30386):在android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2904)
03-19 23:44:40.423:E / AndroidRuntime(30386):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2367)
03-19 23:44:40.423:E / AndroidRuntime(30386):在android.app.ActivityThread.access $ 600(ActivityThread.java:156)
03-19 23:44:40.423:E / AndroidRuntime(30386):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1250)
03-19 23:44:40.423:E / AndroidRuntime(30386):在android.os.Handler.dispatchMessage(Handler.java:99)
03-19 23:44:40.423:E / AndroidRuntime(30386):在android.os.Looper.loop(Looper.java:137)
03-19 23:44:40.423:E / AndroidRuntime(30386):在android.app.ActivityThread.main(ActivityThread.java:5234)
03-19 23:44:40.423:E / AndroidRuntime(30386):在java.lang.reflect.Method.invokeNative(本机方法)
03-19 23:44:40.423:E / AndroidRuntime(30386):在java.lang.reflect.Method.invoke(Method.java:525)
03-19 23:44:40.423:E / AndroidRuntime(30386):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:799)
03-19 23:44:40.423:E / AndroidRuntime(30386):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
03-19 23:44:40.423:E / AndroidRuntime(30386):在dalvik.system.NativeStart.main(本机方法)
03-19 23:44:40.423:E / AndroidRuntime(30386):android.support.v4.app.SuperNotCalledException:产生的原因片段AndroidFragment {42678970#0 ID = 0x1020002安卓}没有通过调用super.onResume()
03-19 23:44:40.423:E / AndroidRuntime(30386):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:919)
03-19 23:44:40.423:E / AndroidRuntime(30386):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
03-19 23:44:40.423:E / AndroidRuntime(30386):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
03-19 23:44:40.423:E / AndroidRuntime(30386):在android.support.v4.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:1820)
03-19 23:44:40.423:E / AndroidRuntime(30386):在android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:412)
03-19 23:44:40.423:E / AndroidRuntime(30386):在com.actionbarsherlock.app.SherlockFragmentActivity.onPostResume(SherlockFragmentActivity.java:69)
03-19 23:44:40.423:E / AndroidRuntime(30386):在android.app.Activity.performResume(Activity.java:5230)
03-19 23:44:40.423:E / AndroidRuntime(30386):在android.app.ActivityThread.performResumeActivity(ActivityThread.java:2865)
03-19 23:44:40.423:E / AndroidRuntime(30386):... 12多
解决方案
您忘了 super.onResume()
通话,似乎:
...
... @覆盖
公共无效onResume(){
super.onResume(); //不要忘记调用super.onResume()
Log.w(Aplikacija_resume,Startovana);
新loadListView()执行(); } ...
...
I have problem with SherlockListFtagment and xml parser. On ListActivitiy working with AsyncTask and no have problem. What I need edit for working on ListFragment.
Code:
public class AndroidFragment extends SherlockListFragment{
static final String URL = "http://...";
// XML node keys
static final String KEY_ITEM = "novost"; // parent node
//static final String KEY_ID = "id";
static final String KEY_NAME = "naslov";
static final String KEY_COST = "datum";
static final String KEY_DESC = "text";
static final String KEY_LINK = "link";
static final String KEY_LINK1 = "doc";
ArrayList<HashMap<String, String>> menuItems;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view =inflater.inflate(R.layout.activity_main, null);
Log.w("Aplikacija_view","Startovana" );
return view;
}
@Override
public void onResume() {
Log.w("Aplikacija_resume","Startovana" );
new loadListView().execute();
}
public class loadListView extends AsyncTask<Integer, String, String>
{
@Override protected void onPreExecute()
{
Toast.makeText(getActivity(), "Ucitavanje...", Toast.LENGTH_LONG).show();
super.onPreExecute();
}
@Override protected String doInBackground(Integer... args)
{ // updating UI from Background Thread
menuItems = new ArrayList<HashMap<String, String>>();
final XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_ITEM);
// looping through all item nodes <item>
for (int i = 0; i < nl.getLength(); i++) {
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
// adding each child node to HashMap key => value
map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
map.put(KEY_COST, "Datum: " + parser.getValue(e, KEY_COST));
map.put(KEY_DESC, parser.getValue(e, KEY_DESC));
map.put(KEY_LINK, parser.getValue(e, KEY_LINK));
map.put(KEY_LINK1, parser.getValue(e, KEY_LINK1));
// adding HashList to ArrayList
menuItems.add(map);
}
return null;
}
@Override protected void onPostExecute(String args)
{
Toast.makeText(getActivity(), "Ucitano", Toast.LENGTH_LONG).show();
String[] from = { KEY_NAME, KEY_DESC, KEY_COST,KEY_LINK,KEY_LINK1};
/** Ids of views in listview_layout */
int[] to = { R.id.naslov, R.id.novost, R.id.datum,R.id.link,R.id.link1};
// Instantiating an adapter to store each items
// R.layout.listview_layout defines the layout of each item
SimpleAdapter adapter = new SimpleAdapter(getActivity().getBaseContext(), menuItems, R.layout.listview_layout, from, to);
// Setting the adapter to the listView
setListAdapter(adapter);
}
}
}
Application is allways is creshed. What i need to edit ?
*******Update log*************
03-19 23:44:40.203: W/Aplikacija_view(30386): Startovana
03-19 23:44:40.233: W/Aplikacija_resume(30386): Startovana
03-19 23:44:40.243: W/asset(30386): deep redirect failure from 0x01030046 => 0x0a07000c, defStyleAttr=0x01010084, defStyleRes=0x0103008f, style=0x00000000
03-19 23:44:40.243: W/asset(30386): deep redirect failure from 0x01030046 => 0x0a07000c, defStyleAttr=0x01010084, defStyleRes=0x0103008f, style=0x00000000
03-19 23:44:40.413: D/AndroidRuntime(30386): Shutting down VM
03-19 23:44:40.413: W/dalvikvm(30386): threadid=1: thread exiting with uncaught exception (group=0x4200fa08)
03-19 23:44:40.423: E/AndroidRuntime(30386): FATAL EXCEPTION: main
03-19 23:44:40.423: E/AndroidRuntime(30386): java.lang.RuntimeException: Unable to resume activity {in.wptrafficanalyzer.actionbarsherlocknavtabwithimages/in.wptrafficanalyzer.actionbarsherlocknavtabwithimages.MainActivity}: android.support.v4.app.SuperNotCalledException: Fragment AndroidFragment{42678970 #0 id=0x1020002 android} did not call through to super.onResume()
03-19 23:44:40.423: E/AndroidRuntime(30386): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2875)
03-19 23:44:40.423: E/AndroidRuntime(30386): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2904)
03-19 23:44:40.423: E/AndroidRuntime(30386): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2367)
03-19 23:44:40.423: E/AndroidRuntime(30386): at android.app.ActivityThread.access$600(ActivityThread.java:156)
03-19 23:44:40.423: E/AndroidRuntime(30386): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1250)
03-19 23:44:40.423: E/AndroidRuntime(30386): at android.os.Handler.dispatchMessage(Handler.java:99)
03-19 23:44:40.423: E/AndroidRuntime(30386): at android.os.Looper.loop(Looper.java:137)
03-19 23:44:40.423: E/AndroidRuntime(30386): at android.app.ActivityThread.main(ActivityThread.java:5234)
03-19 23:44:40.423: E/AndroidRuntime(30386): at java.lang.reflect.Method.invokeNative(Native Method)
03-19 23:44:40.423: E/AndroidRuntime(30386): at java.lang.reflect.Method.invoke(Method.java:525)
03-19 23:44:40.423: E/AndroidRuntime(30386): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799)
03-19 23:44:40.423: E/AndroidRuntime(30386): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
03-19 23:44:40.423: E/AndroidRuntime(30386): at dalvik.system.NativeStart.main(Native Method)
03-19 23:44:40.423: E/AndroidRuntime(30386): Caused by: android.support.v4.app.SuperNotCalledException: Fragment AndroidFragment{42678970 #0 id=0x1020002 android} did not call through to super.onResume()
03-19 23:44:40.423: E/AndroidRuntime(30386): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:919)
03-19 23:44:40.423: E/AndroidRuntime(30386): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
03-19 23:44:40.423: E/AndroidRuntime(30386): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
03-19 23:44:40.423: E/AndroidRuntime(30386): at android.support.v4.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:1820)
03-19 23:44:40.423: E/AndroidRuntime(30386): at android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:412)
03-19 23:44:40.423: E/AndroidRuntime(30386): at com.actionbarsherlock.app.SherlockFragmentActivity.onPostResume(SherlockFragmentActivity.java:69)
03-19 23:44:40.423: E/AndroidRuntime(30386): at android.app.Activity.performResume(Activity.java:5230)
03-19 23:44:40.423: E/AndroidRuntime(30386): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2865)
03-19 23:44:40.423: E/AndroidRuntime(30386): ... 12 more
解决方案
You forgot super.onResume()
call, it seems:
...
...
@Override
public void onResume() {
super.onResume(); // don't forget to call super.onResume()
Log.w("Aplikacija_resume","Startovana" );
new loadListView().execute();
}
...
...
这篇关于Android的ListFragment(福尔摩斯)从URL xml解析的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文