2015-02-01 6 views
1

Я пытаюсь создать пользовательский ListView, но мое приложение разбивается, когда я пытаюсь создать объект RegistrationInfo. Я получаю NULLPointerException. Может ли кто-нибудь сказать мне, почему?CustomAdapter в Android

SecondActivity.java

public class SecondActivity extends Activity implements OnItemLongClickListener { 

SharedPreferences pref; 
CustomAdapter adapter; 
ListView lv; 
ArrayList<RegistrationInfo> registrationlist; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.showstoreddata); 

    lv = (ListView) findViewById(R.id.showdata);   

    File prefsdir = new File(getApplicationInfo().dataDir,"shared_prefs"); 
    String[] list = prefsdir.list(); 
    String[] preflist = new String[list.length]; 
    for(int i=0;i<list.length;i++) 
    { 
     String preffile = list[i].substring(0, list[i].length()-4); 
     preflist[i]=preffile; 
    } 

    registrationlist = new ArrayList<RegistrationInfo>(); 
    for(int index=0;index<preflist.length;index++) 
    { 
      SharedPreferences spref = getSharedPreferences(preflist[index], MODE_PRIVATE);    
      String firstName = spref.getString("firstName", ""); 
      String lastName = spref.getString("lastName", ""); 
      String email = spref.getString("email", ""); 
      String contactno = spref.getString("contactno", ""); 
      Toast.makeText(this, firstName+" "+lastName+" "+email+" "+contactno, Toast.LENGTH_LONG).show(); 

//Crashing due to the statement below 

      RegistrationInfo user = new RegistrationInfo(firstName, lastName, email, contactno); 
      Toast.makeText(this, "abcd", Toast.LENGTH_LONG).show(); 
      registrationlist.add(user); 
      Toast.makeText(this, "a", Toast.LENGTH_LONG).show(); 
      adapter = new CustomAdapter(registrationlist, this); 
      Toast.makeText(this, "b", Toast.LENGTH_LONG).show(); 
      lv.setAdapter(adapter);   

    } 
} 

}

RegistrationInfo.java

public class RegistrationInfo 
{ 
    private String firstName,lastName,email,contactno; 

public RegistrationInfo(String fName,String lName,String eid,String cno) 
{ 
    firstName = fName; 
    lastName = lName; 
    email = eid;     
    contactno = cno; 
} 

public String getFirstName() { 
    return firstName; 
} 

public void setFirstName(String firstName) { 
    this.firstName = firstName; 
} 

public String getLastName() { 
    return lastName; 
} 

public void setLastName(String lastName) { 
    this.lastName = lastName; 
} 

public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

public String getContactno() { 
    return contactno; 
} 

public void setContactno(String contactno) { 
    this.contactno = contactno; 
} 

} 

CustomAdapter.java

public class CustomAdapter extends BaseAdapter 
{ 

Context context; 
ArrayList<RegistrationInfo> registration; 

public CustomAdapter(ArrayList list,Context c) 
{ 
    registration = list; 
    context = c; 
} 

@Override 
public int getCount() { 
    return registration.size(); 
} 

@Override 
public RegistrationInfo getItem(int pos) { 
    return registration.get(pos); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int pos, View convertView, ViewGroup parent) 
{ 
    View v = convertView; 
    if(v==null) 
    { 
     LayoutInflater inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = inflator.inflate(R.layout.customlistviewlayout, null); 

     TextView name = (TextView) v.findViewById(R.id.name); 
     TextView contactno = (TextView) v.findViewById(R.id.contactno); 
     TextView email = (TextView) v.findViewById(R.id.email); 

     RegistrationInfo user = registration.get(pos); 

     //name.setText("Name : "+user.getFirstName()+" "+user.getLastName()); 
     //email.setText("Email id : "+user.getEmail()); 
     //contactno.setText("Contact No : "+user.getContactno()); 
     return v; 
    } 
    return null; 
} 

} 

Logcat

02-01 20:20:30.984: E/AndroidRuntime(12355): FATAL EXCEPTION: main 
02-01 20:20:30.984: E/AndroidRuntime(12355): java.lang.NullPointerException 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.widget.AbsListView.obtainView(AbsListView.java:1581) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.widget.ListView.measureHeightOfChildren(ListView.java:1251) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.widget.ListView.onMeasure(ListView.java:1162) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.view.View.measure(View.java:8313) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.widget.LinearLayout.measureVertical(LinearLayout.java:386) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.widget.LinearLayout.onMeasure(LinearLayout.java:309) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.view.View.measure(View.java:8313) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.view.View.measure(View.java:8313) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.widget.LinearLayout.measureVertical(LinearLayout.java:531) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.widget.LinearLayout.onMeasure(LinearLayout.java:309) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.view.View.measure(View.java:8313) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.view.View.measure(View.java:8313) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.view.ViewRoot.performTraversals(ViewRoot.java:845) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.view.ViewRoot.handleMessage(ViewRoot.java:1865) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.os.Looper.loop(Looper.java:130) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at android.app.ActivityThread.main(ActivityThread.java:3687) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at java.lang.reflect.Method.invokeNative(Native Method) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at java.lang.reflect.Method.invoke(Method.java:507) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
02-01 20:20:30.984: E/AndroidRuntime(12355): at dalvik.system.NativeStart.main(Native Method) 
+0

разместим ваш класс CustomAdapter пожалуйста –

+0

Почему бы вы добавить свой LogCat? –

ответ

3

Вы не можете вернуть null в своем getView. Изменение

return v; 
    } 
    return null; 

в

} 
return convertView; 

вид вы возвращаетесь в getView является одним из листа вы хотите показать в вашем GridView/ListView. Система должна измерять и рисовать.

0

Внутри вашего getView() вы потенциально возвращаетесь null. Вам всегда нужно возвращать представление здесь.

Изменить заявление:

return null; 

в

return v; 
0

Попробуйте код ниже:

public class CustomAdapter extends BaseAdapter { 
Context context; 
ArrayList<RegistrationInfo> registration; 

public CustomAdapter(ArrayList list,Context c) { 
    registration = list; 
    context = c; 
} 

@Override 
public int getCount() { 
    return registration.size(); 
} 

@Override 
public RegistrationInfo getItem(int pos) { 
    return registration.get(pos); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int pos, View convertView, ViewGroup parent) 
{ 
    ViewHolder holder = null; 
    if (convertView == null) { 
     LayoutInflater inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflator.inflate(R.layout.customlistviewlayout, null); 
     holder = new ViewHolder(); 
     holder.name = (TextView) convertView.findViewById(R.id.name); 
     holder.contactno = (TextView) convertView.findViewById(R.id.contactno); 
     holder.email = (TextView) convertView.findViewById(R.id.email); 

     convertView.setTag(holder); 
    } else{ 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    //write your code 
    return convertView; 
} 
private class ViewHolder{ 
    TextView name,contactno,email; 
    } 
} 
Смежные вопросы