어댑터가있는 사용자 정의보기를 구현하는 데 문제가 있습니다. 코드에 오류가 표시되지 않지만 실행하면 null 포인트 예외가 발생합니다.listview 용 어댑터의 null 예외
public class FriendsAdapter extends BaseAdapter{
private Activity activity;
ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;
public ImageLoader imageLoader;
public FriendsAdapter (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.row_friend_cell, null);
TextView surname_friend = (TextView)vi.findViewById(R.id.surname_friend);
TextView name_friend = (TextView)vi.findViewById(R.id.name_friend);
TextView relation = (TextView)vi.findViewById(R.id.relation);
ImageView avatar = (ImageView)vi.findViewById(R.id.avatar);
HashMap<String, String> friends = new HashMap<String, String>();
friends = data.get(position);
// Setting all values in listview
surname_friend.setText(friends.get(ListFriendsMain.KEY_SURNAME));
name_friend.setText(friends.get(ListFriendsMain.KEY_NAME));
relation.setText(friends.get(ListFriendsMain.KEY_RELATION));
imageLoader.DisplayImage(friends.get(ListFriendsMain.KEY_AVATAR_URL), avatar);
return vi;
}
}
내가 왜 그 오류가 점점 오전에 어떤 아이디어 :
01-08 12:21:43.949: E/AndroidRuntime(12646): FATAL EXCEPTION: main
01-08 12:21:43.949: E/AndroidRuntime(12646): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jp.blueoceans2/friends.ListFriendsMain}: java.lang.NullPointerException
01-08 12:21:43.949: E/AndroidRuntime(12646): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1816)
01-08 12:21:43.949: E/AndroidRuntime(12646): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1837)
01-08 12:21:43.949: E/AndroidRuntime(12646): at android.app.ActivityThread.access$1500(ActivityThread.java:132)
01-08 12:21:43.949: E/AndroidRuntime(12646): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1033)
01-08 12:21:43.949: E/AndroidRuntime(12646): at android.os.Handler.dispatchMessage(Handler.java:99)
01-08 12:21:43.949: E/AndroidRuntime(12646): at android.os.Looper.loop(Looper.java:143)
01-08 12:21:43.949: E/AndroidRuntime(12646): at android.app.ActivityThread.main(ActivityThread.java:4196)
01-08 12:21:43.949: E/AndroidRuntime(12646): at java.lang.reflect.Method.invokeNative(Native Method)
01-08 12:21:43.949: E/AndroidRuntime(12646): at java.lang.reflect.Method.invoke(Method.java:507)
01-08 12:21:43.949: E/AndroidRuntime(12646): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-08 12:21:43.949: E/AndroidRuntime(12646): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-08 12:21:43.949: E/AndroidRuntime(12646): at dalvik.system.NativeStart.main(Native Method)
01-08 12:21:43.949: E/AndroidRuntime(12646): Caused by: java.lang.NullPointerException
01-08 12:21:43.949: E/AndroidRuntime(12646): at friends.ListFriendsMain.onCreate(ListFriendsMain.java:95)
01-08 12:21:43.949: E/AndroidRuntime(12646): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
01-08 12:21:43.949: E/AndroidRuntime(12646): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1780)
01-08 12:21:43.949: E/AndroidRuntime(12646): ... 11 more
어댑터의 코드는 다음과입니까?
편집
주요 활동 코드는 오류 및 내가 사용하는 정보를 지적했다.
XMLParser parser = new XMLParser();
//HashMap<String, String> map = parser.getXmlFromUrl(URL, userid);
String xml = parser.getXmlFromUrl(URL, userid);
//Log.v("pictures", "string xml " + xml);
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_FRIEND);
for (int i = 0; i < nl.getLength(); i++){
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_SURNAME, parser.getValue(e, KEY_SURNAME));
map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
map.put(KEY_RELATION, parser.getValue(e, KEY_RELATION));
map.put(KEY_AVATAR_URL, parser.getValue(e, KEY_AVATAR_URL));
// adding HashList to ArrayList
info.add(map);
}
list=(ListView)findViewById(R.id.list);
adapter = new FriendsAdapter(this, info);
list.setAdapter(adapter);
// Click event for single list row
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
}
});
라인 (95)은 특별히 이것에 의미 :
list.setAdapter(adapter);
실제로 listview id를 @ + id/list에서 @ + id/android : list로 변경하기 전에 문제가 있었지만 Eclipse는 id와 함께 listview를 가져야한다고 계속 말했습니다. 그 말? – David
아마도 이름 목록 때문일 수 있습니다. 가끔 Eclipse가 일을 망칠 때도 있습니다. 더 큰 프로젝트에서 시간을 절약하기 위해 좋은 명명 규칙을 갖는 것이 좋습니다. ListView 목록에 이름을 지정하는 대신 idListViewFriends와 같은 이름을 사용하십시오. –
당신이 맞습니다. 이것은 Eclipse가 좋지 않은 경우를 제외하고는 항상하려고하는 것입니다. 어쨌든 도움을 주셔서 감사합니다. – David