2013-01-08 2 views
0

어댑터가있는 사용자 정의보기를 구현하는 데 문제가 있습니다. 코드에 오류가 표시되지 않지만 실행하면 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); 

답변

1

:

list=(ListView)findViewById(R.id.list); 
adapter = new FriendsAdapter(this, info); 
list.setAdapter(adapter); 

어댑터가 확실히 null이 아닌 당신의 코드를 보여 주면 구체적으로는 도움이 될 것이다.
setContentView()에서 어떤 레이아웃을 사용합니까?
레이아웃에 id = 목록이있는 ListView가 있는지 확인하십시오. 당신의 흔적이 맞다면 제가 생각할 수있는 유일한 문제입니다.

+0

실제로 listview id를 @ + id/list에서 @ + id/android : list로 변경하기 전에 문제가 있었지만 Eclipse는 id와 함께 listview를 가져야한다고 계속 말했습니다. 그 말? – David

+0

아마도 이름 목록 때문일 수 있습니다. 가끔 Eclipse가 일을 망칠 때도 있습니다. 더 큰 프로젝트에서 시간을 절약하기 위해 좋은 명명 규칙을 갖는 것이 좋습니다. ListView 목록에 이름을 지정하는 대신 idListViewFriends와 같은 이름을 사용하십시오. –

+0

당신이 맞습니다. 이것은 Eclipse가 좋지 않은 경우를 제외하고는 항상하려고하는 것입니다. 어쨌든 도움을 주셔서 감사합니다. – David

0

문제는 이에 따라 행 번호 95ListFriendsMain class in onCreate()이다. Caused by: java.lang.NullPointerException at friends.ListFriendsMain.onCreate(ListFriendsMain.java:95)

관련 코드로 질문을 편집 할 수 있으면 문제가 정확하게 해결 될 가능성이 있습니다.

1

표시 한 호출 스택은 버그가 ListFriendsMain 어딘가에 있음을 나타냅니다. 당신의 코드를 살펴 갖는

friends.ListFriendsMain.onCreate(ListFriendsMain.java:95)