我正在食品订单应用程序中创建购物车按钮和购物车。单击购物车floataction按钮后出现错误,其次是日志猫和CartaAdapter.java。在logcat中,我在第72行和第89行上出错了。同时给出了预期输出的屏幕截图,并且输出了error.i在单击“下单”按钮和给出地址后再次出错,不幸的是在单击订单后停止。 error pic1 expected ouput after clicking yes on order pic2
Logcat错误
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.sharma.digimenu.Model.User.getPhone()' on a null object reference
at com.example.sharma.digimenu.Cart$2.onClick(Cart.java:95)
at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5292)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
Cart.java
public class Cart extends AppCompatActivity {
RecyclerView recyclerView;
RecyclerView.LayoutManager layoutManager;
FirebaseDatabase database;
DatabaseReference requests;
TextView txtTotalPrice;
Button btnPlace;
List<Order> cart = new ArrayList<>();
CartAdapter adapter;
private DialogFragment dialogInterface;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cart);
database = FirebaseDatabase.getInstance();
requests = database.getReference("Requests");
recyclerView = (RecyclerView) findViewById(R.id.listCart);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
txtTotalPrice = (TextView) findViewById(R.id.total);
btnPlace = (Button) findViewById(R.id.btnPlaceOrder);
btnPlace.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showAlertDialog();
}
});
loadListFood();
}
private void showAlertDialog() {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(Cart.this);
alertDialog.setTitle("One more step..");
alertDialog.setMessage("Enter your Address");
final EditText editAddress = new EditText(Cart.this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT
);
editAddress.setLayoutParams(lp);
alertDialog.setView(editAddress);
alertDialog.setIcon(R.drawable.ic_shopping_cart_black_24dp);
alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Request request = new Request(
Common.currentUser.getPhone(),
Common.currentUser.getName(),
editAddress.getText().toString(),
txtTotalPrice.getText().toString(),
cart
);
requests.child(String.valueOf(System.currentTimeMillis()))
.setValue(request);
new Database(getBaseContext()).cleanCart();
Toast.makeText(Cart.this,"Thankyou ,Order Placed",Toast.LENGTH_SHORT).show();
finish();
}
});
alertDialog.setNegativeButton("NO", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialogInterface.dismiss();
}
});
alertDialog.show();
}
private void loadListFood() {
cart = new Database(this).getCarts();
adapter = new CartAdapter(cart,this);
recyclerView.setAdapter(adapter);
int total= 0;
for (Order order:cart)
total+=(Integer.parseInt(order.getPrice()))*(Integer.parseInt(order.getQuantity()));
Locale locale = new Locale("en", "IN");
NumberFormat fmt = NumberFormat.getCurrencyInstance(locale);
txtTotalPrice.setText(fmt.format(total));
}
}
在此Common.currentUser.getPhone()上获取错误
Common.java
package com.example.sharma.digimenu.Common;
import com.example.sharma.digimenu.Model.Category;
import com.example.sharma.digimenu.Model.User;
public class Common
{
public static User currentUser;
public static Category currentuser;
}
Request.java
import java.util.List;
public class Request {
private String phone;
private String name;
private String address;
private String total;
private List<Order>foods;
public Request() {
}
public Request(String phone, String name, String address, String total, List<Order> foods) {
this.phone = phone;
this.name = name;
this.address = address;
this.total = total;
this.foods = foods;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTotal() {
return total;
}
public void setTotal(String total) {
this.total = total;
}
public List<Order> getFoods() {
return foods;
}
public void setFoods(List<Order> foods) {
this.foods = foods;
}
}
User.java
public class User {
private String email, password, name, phone;
public User(String email, String password, String name,String phone) {
this.email = email;
this.password = password;
this.name = name;
}
public User() {
}
public String getEmail() {
return email;
}
public void setEmail(String email){
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password){
this.password = password;
}
public String getPhone() {
return phone;
}
public void setPhone(String password){
this.phone = phone;
}
public String getName() {
return name;
}
public void setName(String name)
{
this.name = name;
}
}
答案 0 :(得分:0)
您将返回 CardViewHolder 的实例,而您的ViewHolder被命名为 CartViewHolder 。
@NonNull
@Override
public CardViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View itemView = inflater.inflate(R.layout.cart_layout, parent, false);
return new CardViewHolder(itemView); <------- here's the problem
}
还可以在您的 CartAdapter 类中的任何地方,将 CardViewHolder 更改为 CartViewHolder 。