【发布时间】:2019-02-20 19:12:28
【问题描述】:
这是我的片段之一的代码 sn-p:
@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_three, container, false);
listView = (ListView)view.findViewById(R.id.list_listview);
adapter=new list_adapter(getActivity(),transaction_list);
transaction_list.clear();
listView.setAdapter(adapter);
setListViewData();
return view;
}
private void setListViewData() {
RequestQueue requestQueue = Volley.newRequestQueue(getContext());
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, listurl, null,
new Response.Listener<JSONArray>() {
public void onResponse(JSONArray jsonArray) {
if (jsonArray.length() > 0) {
Log.e("JSON ARRAY", jsonArray.toString());
for (int i = 0; i < jsonArray.length(); i++) {
try {
JSONObject obj = jsonArray.getJSONObject(i);
User user = new User();
User.setmName(obj.getString("name"));
User.setmnName(obj.getString("nname"));
User.setmDate(obj.getString("date"));
User.setmProfile(obj.getString("profile"));
user.setmDirection(obj.getString("direction"));
transaction_list.add(user);
} catch (JSONException e) {
e.printStackTrace();
}
adapter.notifyDataSetChanged();
}
try {
info.setText(getView().getResources().getString(R.string.user_rest, jsonArray.getJSONObject(0).getString("info")));
Button edit = getActivity().findViewById(R.id.button_edit);
edit.setClickable(true);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.e("Error", String.valueOf(volleyError));
}
});
// add json array request to the request queue
requestQueue.add(jsonArrayRequest);
}
}
代码工作正常,但是当我在处理 Volley 请求时切换到另一个片段时(基本上是在片段从服务器加载数据时),应用程序崩溃,给我以下错误:
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.res.Resources android.view.View.getResources()” .onResponse(fragment_three.java:178) .onResponse(fragment_three.java:151)
第 178 行: info.setText(getView().getResources().getString(R.string.user_rest, jsonArray.getJSONObject(0).getString("info")));
第 151 行: 新的 Response.Listener() {
第 178 行中的错误以某种方式清楚为什么会发生,但我怎样才能防止它发生呢?
第 151 行的错误有点奇怪,是否可能是因为在“Volley.newRequestQueue(getContext());”之前的行中,当我切换到另一个片段时,getContext() 为“null”或者是这样包含所有片段的 Main Activity 的上下文(因此在通过菜单时它基本上永远不会为空)?
【问题讨论】:
-
我相信 getView() 是空的