【问题标题】:System Service Not available Exception SimpleAdapter Android系统服务不可用异常 SimpleAdapter Android
【发布时间】:2014-05-28 13:25:35
【问题描述】:

您好,我目前在Android上开发一个应用程序,原理很简单:解析一个XML文件,然后在一个listview中填写信息。

我了解如何解析我的 XML 文件,但我一直坚持创建列表视图 .. 我想我看了所有关于填充 listview 的教程 x) 只有我不能在我的应用程序上放置教程,因为我有一个导航选项卡,所以有片段。

我经常看到需要建立一个simpleAdapter并使用布局“simple_list_item_2”。但我不明白这个系统是怎么回事。

这是我在 ArrayList 中解析我的信息的代码:

public class ListParseAdapter extends ListActivity{

    String data;
    String URL = "";
    String ITEM = "item";
    String TITRE = "title";
    String DESCRIPTION = "description";
    String LIEN = "link";
    final String[] fromMapKey =  {"TITRE", "DESCRIPTION"};
    final int[] toLayoutId = {android.R.id.text1, android.R.id.text2};
    HashMap<String, String> map;


    public ListParseAdapter(String pUrl) {
        URL = pUrl;
        map = new HashMap<String, String>();
    }

    public void chargement(){

        XMLParser file = new XMLParser();
        data = file.getXmlFromUrl(URL);
        Document doc = file.getDomElement(data);
        NodeList NbItem = doc.getElementsByTagName(ITEM);

        ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();

        for (int i = 1; i < NbItem.getLength(); i++) {
            // creating new HashMap
            Element e = (Element) NbItem.item(i);
            // adding each child node to HashMap key => value
            map.put(TITRE, file.getValue(e, TITRE));
            map.put(DESCRIPTION, file.getValue(e, DESCRIPTION));
            map.put(LIEN, file.getValue(e, LIEN));

            // adding HashList to ArrayList
            menuItems.add(map);
        }
        // Adding menuItems to ListView
        SimpleAdapter adapter = new SimpleAdapter(this, menuItems,R.layout.simple_list_item_2, fromMapKey, toLayoutId);

        setListAdapter(adapter);
    }
}

我的 Fragment_agenda.xml :

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ListView
        android:id="@+id/ListView01"
        android:layout_width="wrap_content"
        android:layout_height="290dp" >

    </ListView>
</LinearLayout>

还有我的 Fragment_agenda.java:

    public class AgendaFragment extends Fragment{

    private Runnable task = new Runnable() {
        public void run() {
            String url = "***********************";

            ListParseAdapter agenda = new ListParseAdapter(url);
            agenda.chargement();
        }
    };

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        View rootView = inflater.inflate(R.layout.fragment_agenda, container, false);

        task.run();

        return rootView;
    }
}

使用这段代码,我有一个异常System Service Exception Not available,我认为它可能来自这一行:

SimpleAdapter adapter = new SimpleAdapter(this, menuItems,R.layout.simple_list_item_2, fromMapKey, toLayoutId);

我还尝试用我的 (Fragment_agenda.xml) 替换布局 simple_list_item_2,但它不起作用

我没有让我的课程解析 XML,因为我知道它可以工作我之前做过测试 我的日志猫:

05-28 15:55:09.389: E/AndroidRuntime(19765): FATAL EXCEPTION: main
05-28 15:55:09.389: E/AndroidRuntime(19765): Process: app6tem.infolonde, PID: 19765
05-28 15:55:09.389: E/AndroidRuntime(19765): java.lang.IllegalStateException: System services not available to Activities before onCreate()
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.app.Activity.getSystemService(Activity.java:4543)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.widget.SimpleAdapter.<init>(SimpleAdapter.java:85)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at app6tem.adapter.ListParseAdapter.chargement(ListParseAdapter.java:59)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at app6tem.infolonde.AgendaFragment$1.run(AgendaFragment.java:30)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at app6tem.infolonde.AgendaFragment.onCreateView(AgendaFragment.java:42)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:938)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:478)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.view.View.measure(View.java:16504)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.view.View.measure(View.java:16504)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.view.View.measure(View.java:16504)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2552)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.view.View.measure(View.java:16504)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.view.Choreographer.doCallbacks(Choreographer.java:574)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.view.Choreographer.doFrame(Choreographer.java:544)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.os.Handler.handleCallback(Handler.java:733)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.os.Handler.dispatchMessage(Handler.java:95)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.os.Looper.loop(Looper.java:136)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at android.app.ActivityThread.main(ActivityThread.java:5088)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at java.lang.reflect.Method.invoke(Native Method)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781)
05-28 15:55:09.389: E/AndroidRuntime(19765):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)

【问题讨论】:

  • 发布带有该异常的 LogCat
  • 完成,我添加了 logcat
  • AgendaFragment 的第 42 行是什么?那是 SimpleAdapter 行吗?
  • task.run();所以我认为是在运行中
  • ListParseAdapter 上的第 59 行是 SimpleAdapter 行吗?

标签: java android xml listview simpleadapter


【解决方案1】:
ListParseAdapter extends ListActivity

 

ListParseAdapter agenda = new ListParseAdapter(url);
agenda.chargement();

永远不要使用new 实例化活动。它们不会被设置用于任何有用的东西。

看起来ListParseAdapter 根本不应该是一个活动。删除extends ListActivity。如果您需要 Context,请将其作为方法参数传入。在片段中,使用getActivity() 获取对托管活动的引用,您可以将其用作Context

【讨论】:

  • 但是如果我删除新的,我如何初始化我的构造函数?
  • 您可以使用new,只是不要将其与活动类一起使用。
  • 对我来说,ListParseAdapter 不是我认为的活动。而extends ListActivity 是为了尝试填充listview,我什么都不懂……
猜你喜欢
  • 1970-01-01
  • 2017-08-04
  • 2016-06-12
  • 1970-01-01
  • 2010-12-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
相关资源
最近更新 更多