gpt4 book ai didi

java - 上下文在自定义适配器类中显示空指针异常?

转载 作者:行者123 更新时间:2023-11-29 08:38:55 25 4
gpt4 key购买 nike

我正在创建一个带有自定义适配器的 ListView。
在客户适配器类中,我将 Context 对象传递给它的父类(super class),并在为 Adapter 类创建对象时将 Context 对象传递给 MainActivity

显示如下错误

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 对象,它没有显示任何错误。

我对传递 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;
}
}

这是我的主 Activity

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);
}
}
}

最佳答案

but not showing anydata in listview

因为您告诉它不要创建任何 View 。

@Override
public int getCount() {
return 0;
}

您正在使用 ArrayAdapter。您不需要实现 getCount,但如果您实现了,则返回列表的大小

@Override
public int getCount() {
return arraydata == null ? 0 : arraydata.size();
}

无论如何,关于你的问题,倾向于使用 MainActivity.this 就像你为上下文所做的那样( Activity 是上下文)。

如果你的错误在这里

LayoutInflater inflater = LayoutInflater.from(getContext());

那么,那可以改为

LayoutInflater inflater = LayoutInflater.from(this.context);

从构造函数中获取上下文

关于java - 上下文在自定义适配器类中显示空指针异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41734852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com