Android的ListFragment(福尔摩斯)从URL xml解析 [英] Android ListFragment (sherlock) xml parsing from url

查看:219
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆