【发布时间】: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