【发布时间】:2013-11-29 20:28:19
【问题描述】:
我一直在关注这个关于创建自定义布局和 XML 解析的教程。我以自己的方式对其进行了重组,但不幸的是。应用程序在我单击将其引导至使用 XML 查看自定义布局的活动的按钮时崩溃。会不会是网络错误?还是解析错误?或打开活动错误。无论哪种方式,它都会崩溃。而 Logcat 似乎同时发布了所有这些问题。
Logcat:
11-29 15:14:07.347:E/AndroidRuntime(1133):致命异常:主要 11-29 15:14:07.347:E/AndroidRuntime(1133):进程:com.example.clinicbooker,PID:1133 11-29 15:14:07.347: E/AndroidRuntime(1133): java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.example.clinicbooker/com.example.clinicbooker.BookScreen}: android.os.NetworkOnMainThreadException 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 android.app.ActivityThread.access$700(ActivityThread.java:135) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 android.os.Handler.dispatchMessage(Handler.java:102) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 android.os.Looper.loop(Looper.java:137) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 android.app.ActivityThread.main(ActivityThread.java:4998) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 java.lang.reflect.Method.invokeNative(Native Method) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 java.lang.reflect.Method.invoke(Method.java:515) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593) 11-29 15:14:07.347: E/AndroidRuntime(1133): at dalvik.system.NativeStart.main(Native Method) 11-29 15:14:07.347:E/AndroidRuntime(1133):由:android.os.NetworkOnMainThreadException 引起 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 java.net.InetAddress.lookupHostByName(InetAddress.java:385) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 java.net.InetAddress.getAllByName(InetAddress.java:214) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 com.example.functionalities.XMLParser.getXmlFromUrl(XMLParser.java:45) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 com.example.clinicbooker.BookScreen.onCreate(BookScreen.java:43) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 android.app.Activity.performCreate(Activity.java:5243) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 11-29 15:14:07.347: E/AndroidRuntime(1133): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140) 11-29 15:14:07.347: E/AndroidRuntime(1133): ... 11 更多
我的屏幕在用户点击指向它的片段上的按钮时启动:
public class BookScreen extends Activity {
// All static variables
static final String URL = "https://dl.dropboxusercontent.com/u/42241589/test.xml";
// XML node keys
static final String KEY_CLINIC = "clinic"; // parent node
static final String KEY_ID = "id";
static final String KEY_TITLE = "title";
static final String KEY_DATE = "date";
static final String KEY_TIME = "time";
static final String KEY_ADDRESS = "address";
static final String KEY_THUMB_URL = "thumb_url";
ListView list;
LazyAdapter adapter;
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.book_main);
ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML from URL
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_CLINIC);
// looping through all song nodes <song>
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_ID, parser.getValue(e, KEY_ID));
map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
map.put(KEY_DATE, parser.getValue(e, KEY_DATE));
map.put(KEY_TIME, parser.getValue(e, KEY_TIME));
map.put(KEY_ADDRESS, parser.getValue(e, KEY_ADDRESS));
map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL));
// adding HashList to ArrayList
songsList.add(map);
}
list = (ListView) findViewById(R.id.list);
// Getting adapter by passing xml data ArrayList
adapter = new LazyAdapter(this, songsList);
list.setAdapter(adapter);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll()
.build();
StrictMode.setThreadPolicy(policy);
// Click event for single list row
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
}
});
}
}
它的适配器:
public class LazyAdapter extends BaseAdapter {
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;
public ImageLoader imageLoader;
public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
activity = a;
data=d;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader=new ImageLoader(activity.getApplicationContext());
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.book_list_row, null);
TextView title = (TextView)vi.findViewById(R.id.menu_name);
TextView description = (TextView)vi.findViewById(R.id.address);
TextView bookingDate = (TextView)vi.findViewById(R.id.book_date);
TextView bookingTime = (TextView)vi.findViewById(R.id.book_time);
ImageView thumb_image=(ImageView)vi.findViewById(R.id.list_image);
HashMap<String, String> song = new HashMap<String, String>();
song = data.get(position);
// Setting all values in listview
title.setText(song.get(BookScreen.KEY_TITLE));
description.setText(song.get(BookScreen.KEY_ADDRESS));
bookingDate.setText(song.get(BookScreen.KEY_DATE));
bookingTime.setText(song.get(BookScreen.KEY_TIME));
imageLoader.DisplayImage(song.get(BookScreen.KEY_THUMB_URL), thumb_image);
return vi;
}
}
【问题讨论】:
标签: java android xml android-layout