Java 在自定义适配器类中显示空指针异常的上下文?
我正在使用自定义适配器创建ListView。 在customer adapter类中,我将上下文对象传递给它的超类,并在为适配器类创建对象时将上下文对象传递给MainActivity 它显示以下错误Java 在自定义适配器类中显示空指针异常的上下文?,java,android,Java,Android,我正在使用自定义适配器创建ListView。 在customer adapter类中,我将上下文对象传递给它的超类,并在为适配器类创建对象时将上下文对象传递给MainActivity 它显示以下错误 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mylistpractice/com.mylistpractice.MainActivity}: java.lang.NullPointerExceptio
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mylistpractice/com.mylistpractice.MainActivity}:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
现在,在从MainActivity传递参数时,我传递getApplicationContext而不是Context对象,它没有显示任何错误
我对传递上下文对象和传递getApplicationContext之间的区别感到困惑
但是它没有在ListView中显示任何数据
这是适配器类
public class Myadapter extends ArrayAdapter<Data> {
ArrayList<Data> arraydata;
Context context;
public Myadapter(ArrayList<Data> arraydata,Context context) {
super(context,R.layout.content,arraydata);
this.arraydata=arraydata;
this.context=context;
}
@Override
public int getCount() {
return 0;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Data data=getItem(position);
Viewholder viewholder;
View vi=convertView;
if(vi==null) {
viewholder=new Viewholder();
LayoutInflater inflater = LayoutInflater.from(getContext());
vi = inflater.inflate(R.layout.content, parent, false);
viewholder.name=(TextView)vi.findViewById(R.id.name);
viewholder.id=(TextView)vi.findViewById(R.id.id);
vi.setTag(viewholder);
} else {
viewholder=(Viewholder)vi.getTag();
}
viewholder.name.setText(data.getName());
viewholder.id.setText(data.getId());
return vi;
}
public class Viewholder {
TextView id;
TextView name;
}
}
这是我的主要活动
public class MainActivity extends AppCompatActivity {
ListView list;
ArrayList<Data> arraydata=new ArrayList<>();
Myadapter myadapter;
Context context;
Data data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list=(ListView)findViewById(R.id.list);
setList();
myadapter = new Myadapter(arraydata,MainActivity.this);
list.setAdapter(myadapter);
}
public void setList() {
for(int i=0;i<15;i++) {
String s,id;
data = new Data();
data.setName("Farhana:::"+i);
s = data.getName();
data.setId("Id:::"+i);
id = data.getId();
arraydata.add(data);
Log.e("DAtA:--",s);
Log.e("ID:--",id);
}
}
}
但在listview中不显示任何数据
因为你告诉它不要创建任何视图
@Override
public int getCount() {
return 0;
}
您正在使用ArrayAdapter。您不需要实现getCount,但如果需要,则返回列表的大小
@Override
public int getCount() {
return arraydata == null ? 0 : arraydata.size();
}
无论如何,关于你的问题,倾向于使用MainActivity。就像你在上下文中所做的那样,活动就是上下文
如果你的错误在这里
LayoutInflater inflater = LayoutInflater.from(getContext());
那么,那就可以了
LayoutInflater inflater = LayoutInflater.from(this.context);
你从构造器那里得到了上下文
但在listview中不显示任何数据
因为你告诉它不要创建任何视图
@Override
public int getCount() {
return 0;
}
您正在使用ArrayAdapter。您不需要实现getCount,但如果需要,则返回列表的大小
@Override
public int getCount() {
return arraydata == null ? 0 : arraydata.size();
}
无论如何,关于你的问题,倾向于使用MainActivity。就像你在上下文中所做的那样,活动就是上下文
如果你的错误在这里
LayoutInflater inflater = LayoutInflater.from(getContext());
那么,那就可以了
LayoutInflater inflater = LayoutInflater.from(this.context);
您从构造函数中获得的上下文您正在重写方法getCount;当它返回零时,您必须返回数组列表的大小。您正在覆盖方法getCount;它返回零,您必须返回数组列表的大小。您误解了我的观点。它正在返回零。因此,没有什么显示你误解了我的观点。它正在返回零。因此,getCount方法中没有显示Return arraydata size getCount方法中没有显示Return arraydata size