【发布时间】:2016-08-11 17:49:58
【问题描述】:
目前我正在尝试使用 JSON 填充我的自定义列表视图
它可以很好地处理虚拟数据,我的 json 请求也很好。
所有这些代码都在 onCreate 视图中,我知道我们应该使用异步任务或某种方式来生成一个新线程来提取数据,但我只想把它放在这里用于测试目的,所以我知道我可以提取数据第一的。
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new BasicAuthInterceptor()).addNetworkInterceptor(new StethoInterceptor()).build();
String url = "http://10.0.2.2:3000/response";
Request request = new Request.Builder().url(url)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.i(TAG, "call api error");
Log.e("Volley", e.toString());
}
@Override
public void onResponse(Call call, okhttp3.Response response) {
try {
if (!response.isSuccessful())
throw new IOException("Unexpected code " + response);
final String body = response.body().string();
JSONObject Jobject = new JSONObject(body);
JSONArray Jarray = Jobject.getJSONArray("inboxMsgList");
Log.e("Array", String.valueOf(Jarray.length()));
//Initializing my ArrayLis here I already defined it where I have my other variables defined.
arrMessageData = new ArrayList<>();
JSONObject object = Jarray.getJSONObject(0);
MessageData msg3 = new MessageData();
msg3.setName((String) object.get("fromUser"));
msg3.setMessage((String) object.get("message"));
msg3.setImage(R.drawable.msgone);
msg3.setRead(true);
msg3.setSubject((String) object.get("subject"));
arrMessageData.add(msg3);
Log.e("DetailObject", msg3.getName());
// Log.e("FullJsonReply", body.toString());
} catch (Exception e){
Log.e("Volley2", e.toString());
}
}
});
adapter = new CustomAdapterReferral(getActivity().getBaseContext(), arrMessageData);
usersListView.setAdapter(adapter);
我得到的错误是:
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“int java.util.ArrayList.size()” 在 com.adilpatel.vitalengine.ListAdapters.CustomAdapterReferral.getCount(CustomAdapterReferral.java:40)
第 40 行是我的适配器中的 getCount
public int getCount() {
return arrMessageData.size();
}
我在返回大小的地方放了一个断点
看起来大小为 1,但它仍然给出空指针异常。是因为适配器为空吗?什么是适配器?
编辑:这是我的 CustomAdapterReferral:
public class CustomAdapterReferral extends BaseAdapter {
ArrayList<MessageData> arrMessageData;
Context context;
private static LayoutInflater inflater = null;
public CustomAdapterReferral(Context mainActivity, ArrayList<MessageData> arrMessageData){
this.arrMessageData = arrMessageData;
context = mainActivity;
inflater = ( LayoutInflater )context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return arrMessageData.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
public class ViewHolder {
TextView referralName;
ImageView referralImage;
TextView referralMessage;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder=new ViewHolder();
View rootView = inflater.inflate(R.layout.list_item_referral, null);
holder.referralName = (TextView) rootView.findViewById(R.id.referralName);
holder.referralImage =(ImageView) rootView.findViewById(R.id.referralImage);
holder.referralMessage= (TextView) rootView.findViewById(R.id.referralMessage);
holder.referralMessage.setText("" + arrMessageData.get(position).getMessage());
holder.referralName.setText("" + arrMessageData.get(position).getName());
holder.referralImage.setImageResource(arrMessageData.get(position).getImage());
return rootView;
}
}
【问题讨论】:
-
您能否编辑您的问题以显示课程
CustomAdapterReferral? -
@quidproquo 已更新