Mar*_*aes -1 android nullpointerexception android-fragments
我有一个具有一个活动的应用程序,此活动有一个片段。在此片段中,我在Listview中显示“待处理订单”。我设置了我的方法,以每55秒一次在我的数据库中为挂起的订单重新加载搜索。我每60秒重新加载一次活动。问题是,当片段被加载时出现此错误:
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'java.io.File android.content.Context.getCacheDir()'
而且我正在尝试跟踪此问题,但这并不是一件容易的事,因为我仍然是Android开发的初学者。
这是片段:
public class PendingOrdersFragment extends Fragment implements AdapterView.OnItemClickListener {
ListView lstOrders;
ArrayList<ChefOrderList> orderLists;
TextView empty;
private SwipeRefreshLayout mSwipeRefreshLayout;
private final Handler handler = new Handler();
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_list, null);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
doTheAutoRefresh();
lstOrders = (ListView) view.findViewById(lstFood);
lstOrders.setOnItemClickListener(this);
empty = (TextView) view.findViewById(R.id.empty);
mSwipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_refresh);
mSwipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
if (NetworkHelper.isOnline(getActivity())) {
callServiceForMenuStatusDetails(PrefernceHelper.getString(getActivity(),Commons.Constants.DATE));
} else {
NetworkHelper.noNetworkToast(getActivity());
}
}
});
System.out.println(PrefernceHelper.getString(getActivity(), Commons.Constants.DATE));
if (NetworkHelper.isOnline(getActivity())) {
callServiceForMenuStatusDetails(PrefernceHelper.getString(getActivity(), Commons.Constants.DATE));
} else {
NetworkHelper.noNetworkToast(getActivity());
}
}
//ProgressDialog progressDialog;
private void callServiceForMenuStatusDetails(String date) {
//progressDialog = new ProgressDialog(getActivity());
//progressDialog.setTitle("Loading");
//progressDialog.setMessage("Please Wait");
//progressDialog.setCancelable(false);
//progressDialog.show();
new VolleyHelper(getActivity()).get("chefOrderDetailsByDate/" + PrefernceHelper.getString(getActivity(), Commons.Constants.USER_ID) + "/" + date, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
orderLists = new ArrayList<ChefOrderList>();
mSwipeRefreshLayout.setRefreshing(false);
try {
JSONArray jsonArray = response.getJSONArray("orderlist");
int pending = 0, accepted = 0, rejected = 0;
for (int i = 0; i < jsonArray.length(); i++) {
ChefOrderList orderList = new ChefOrderList();
JSONObject jsonObject = jsonArray.getJSONObject(i);
orderList.setOrderId(jsonObject.getString("orderid"));
orderList.setOrderStatus(jsonObject.getString("order_status"));
orderList.setOrderDate(jsonObject.getString("order_date"));
orderList.setOrderFrom(jsonObject.getString("orderfrom"));
if(jsonObject.getString("order_status").equals("Pending")) {
//System.out.println(orderList.getOrderId());
orderLists.add(orderList);
pending = pending + 1;
TabLayoutScreenActivity.orderSizeVariable = TabLayoutScreenActivity.orderSizeVariable + 1;
} else if (jsonObject.getString("order_status").equals("Order accepted by chef")){
accepted = accepted + 1;
} else if (jsonObject.getString("order_status").equals("Order rejected by chef")){
rejected = rejected + 1;
}
}
//for (int i= 0; i< orderLists.size();i++) {
// System.out.println(orderLists.get(i).getOrderId());
//}
System.out.println("Variable: " + TabLayoutScreenActivity.orderSizeVariable);
System.out.println("Fixed: " + TabLayoutScreenActivity.orderSizeFixed);
if (TabLayoutScreenActivity.orderSizeVariable > TabLayoutScreenActivity.orderSizeFixed){
TabLayoutScreenActivity.orderSizeFixed = TabLayoutScreenActivity.orderSizeVariable;
PushNotification();
}
TabLayoutScreenActivity.orderSizeVariable = 0;
if(jsonArray.length() > 0 && pending!=0) {
lstOrders.setVisibility(View.VISIBLE);
empty.setVisibility(View.INVISIBLE);
ChefOrderListAdapter adpater = new ChefOrderListAdapter(getActivity(), orderLists);
lstOrders.setAdapter(adpater);
}else {
lstOrders.setEmptyView(getView().findViewById(android.R.id.empty));
empty.setVisibility(View.VISIBLE);
lstOrders.setVisibility(View.INVISIBLE);
}
//progressDialog.dismiss();
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
}
public void PushNotification()
{
NotificationManager nm = (NotificationManager)getContext().getSystemService(NOTIFICATION_SERVICE);
Notification.Builder builder = new Notification.Builder(getContext());
Intent notificationIntent = new Intent(getContext(), TabLayoutScreenActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(getContext(),0,notificationIntent,0);
//set
builder.setContentIntent(contentIntent);
builder.setSmallIcon(R.drawable.chef_hat);
builder.setContentText("Click here to open the app.");
builder.setContentTitle("You have a new order!");
if(android.os.Build.VERSION.SDK_INT>=21) {
builder.setColor(Color.parseColor("#D8540D"));
}
builder.setAutoCancel(true);
builder.setDefaults(Notification.DEFAULT_ALL);
Notification notification = builder.build();
nm.notify((int)System.currentTimeMillis(),notification);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
System.out.println("Test");
Intent intent = new Intent();
intent.putExtra("orderID", orderLists.get(position).getOrderId());
intent.putExtra("orderFrom", orderLists.get(position).getOrderFrom());
intent.setClass(getActivity(), OrderDetailsActivity.class);
startActivity(intent);
getActivity().finish();
}
private void doTheAutoRefresh() {
handler.postDelayed(new Runnable() {
@Override
public void run() {
System.out.println("Auto refresh: Pending");
//if (!(PrefernceHelper.getString(getActivity(), Commons.Constants.DATE).equals(null))) {
Calendar c = Calendar.getInstance();
SimpleDateFormat postFormater = new SimpleDateFormat("yyyy-MM-dd");
callServiceForMenuStatusDetails(postFormater.format(c.getTime()));
//}
doTheAutoRefresh();
}
}, 55000);
}
}
Run Code Online (Sandbox Code Playgroud)
这是该错误的完整日志目录:
Volley.java 43是:
Volley.java 78是:
VolleyHelper.java 34是:
对于待处理订单片段:第47行是:
public class PendingOrdersFragment extends Fragment implements AdapterView.OnItemClickListener {
Run Code Online (Sandbox Code Playgroud)
第105行是:
new VolleyHelper(getActivity()).get("chefOrderDetailsByDate/" + PrefernceHelper.getString(getActivity(), Commons.Constants.USER_ID) + "/" + date, null, new Response.Listener<JSONObject>() {
Run Code Online (Sandbox Code Playgroud)
222行是:
callServiceForMenuStatusDetails(postFormater.format(c.getTime()));
Run Code Online (Sandbox Code Playgroud)
小智 6
您的错误表示getCacheDir()函数使用的变量为null。在这种情况下,您的变量上下文。您可以这样获得应用程序上下文:
public void onCreate() {
super.onCreate();
Context mContext = getApplicationContext();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16648 次 |
| 最近记录: |