简体   繁体   中英

Android-Listview setOnItemClickListener Error

I have MenuActivity there is listview that display a restaurant menu, it use adapter called FoodAdapter. It works, and I'm trying to make Detail of the menu, if you click on menu then the FoodDetailActivity with food details comes up.

MenuActivity ListView click > FoodDetailActivity with food details comes up.

But the problem appear, when I click on the item on menu listview, blank white screen comes up about 500ms, then back to the MainActivity. My assumption is there is maybe I did something wrong in the putExtra intent on this code on MenuActivity.java, or my phone doesn't support the layout.

orderListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?>parent, View view, int position, long id) {
                Intent i = new Intent(MenuActivity.this, FoodDetailActivity.class);
                Food currentFood = foods.get(position);
                //Log.e("FOOD NAME", currentFood.getFoodName());
                i.putExtra("name", currentFood.getFoodName());
                i.putExtra("image", currentFood.getmImageResource());
                i.putExtra("price", currentFood.getFoodPrice());
                i.putExtra("type", currentFood.getType());
                startActivityForResult(i, REQUEST_CODE);

            }

Here is the full code MenuActivity.java

public class MenuActivity extends AppCompatActivity {
    public static final int REQUEST_CODE = 1;
    FoodAdapter adapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);
        //arraylist to make model array from Food class
        final ArrayList<Food> foods = new ArrayList<>();
        foods.add(new Food("AYAM BAKAR", "Ayam Bakar pak budi", R.drawable.a1, 50000));
        foods.add(new Food("AYAM GORENG", "Ayam Bakar pak budi", R.drawable.a2, 50000));
        foods.add(new Food("AYAM REBUS", "Ayam Bakar pak budi", R.drawable.a3, 50000));
        foods.add(new Food("AYAM KECAP", "Ayam Bakar pak budi", R.drawable.a4, 50000));

        adapter = new FoodAdapter(this, foods);
        ListView orderListView = (ListView) findViewById(R.id.order_list_view);
        orderListView.setAdapter(adapter);
        orderListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?>parent, View view, int position, long id) {
                Intent i = new Intent(MenuActivity.this, FoodDetailActivity.class);
                Food currentFood = foods.get(position);
                //Log.e("FOOD NAME", currentFood.getFoodName());
                i.putExtra("name", currentFood.getFoodName());
                i.putExtra("image", currentFood.getmImageResource());
                i.putExtra("price", currentFood.getFoodPrice());
                i.putExtra("type", currentFood.getType());
                startActivityForResult(i, REQUEST_CODE);

            }
        });

    }

And here is the FoodDetailActivity.java

public class FoodDetailActivity extends AppCompatActivity {
    private int item = 0;
    private int price = 0;
    TextView sumTextView;
    TextView priceTotalTextView;
    TextView txtName, txtQuantity, txtPrice;
    Button btnAdd, btnCart;
    public static SQLiteOpenHelper sqLiteHelper;
    public static String DATABASENAME = "cartDB.db";
    public static String TABLENAME = "cart";
    public static String ID = "id";
    public static String NAME = "name";
    public static String QUANTITY = "quantity";
    public static String PRICE = "price";
    SQLiteDatabase db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_food_detail);
        init();
String name = getIntent().getStringExtra("name");
        String type1 = getIntent().getStringExtra("type");
        int image;
        image = getIntent().getIntExtra("image", -1);
        price = getIntent().getIntExtra("price", -1);
        //Log.e("SECOND ACTIVITY", name);

        TextView nameTextView = (TextView) findViewById(R.id.food_name_text_view);
        nameTextView.setText(name);
        TextView type = (TextView) findViewById(R.id.type);
        type.setText(type1);
        ImageView imageView = (ImageView) findViewById(R.id.food_image);
        imageView.setImageResource(image);
        imageView.setVisibility(View.VISIBLE);
        TextView priceTextView = (TextView) findViewById(R.id.price_detail_text_view);
        priceTextView.setText(Integer.toString(price));

        sumTextView = (TextView)findViewById(R.id.sum_text_view);
        priceTotalTextView = (TextView) findViewById(R.id.price_total_text_view);
        Button incrementButton = (Button) findViewById(R.id.increment_button);
        incrementButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                increment();
            }
        });
        Button decrementButton = (Button) findViewById(R.id.decrement_button);
        decrementButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                decrement();
            }
        });
    }
    private void init(){
        txtName = findViewById(R.id.food_name_text_view);
        txtQuantity = findViewById(R.id.sum_text_view);
        txtPrice = findViewById(R.id.price_total_text_view);
        btnAdd = findViewById(R.id.order_button);
        btnCart = findViewById(R.id.cart_button);

    }
    private void increment(){
        item++;
        sumTextView.setText(Integer.toString(item));
        priceTotalTextView.setText(Integer.toString(sumOfProduct(price)));
    }
    private void decrement(){
        if (item<1){
            Toast.makeText(this, "Maaf Order Minimal 1", Toast.LENGTH_SHORT).show();
            return;
        }
        item = item-1;
        sumTextView.setText(Integer.toString(item));
        priceTotalTextView.setText(Integer.toString(sumOfProduct(price)));
    }
    private int sumOfProduct(int price){

        return item*price;
    }
}

Here is the error log, I don't know which one should I show:

2019-12-26 18:11:21.255 24053-24053/? E/libc: Access denied finding property "persist.vendor.sys.activitylog"
2019-12-26 18:11:21.992 24053-24122/com.rifinew.rumahpohon E/OpenGLRenderer: Device claims wide gamut support, cannot find matching config, error = EGL_SUCCESS
2019-12-26 18:11:22.025 24053-24122/com.rifinew.rumahpohon E/ion: ioctl c0044901 failed with code -1: Invalid argument

//when i click on listview to get detail listview activity
2019-12-26 18:12:58.736 24187-24187/? E/libc: Access denied finding property "persist.vendor.sys.activitylog"
2019-12-26 18:12:58.745 24187-24203/? E/inew.rumahpoho: Failed to send DDMS packet REAQ to debugger (-1 of 20): Broken pipe
2019-12-26 18:12:59.140 24187-24257/? E/OpenGLRenderer: Device claims wide gamut support, cannot find matching config, error = EGL_SUCCESS
2019-12-26 18:12:59.197 24187-24257/? E/ion: ioctl c0044901 failed with code -1: Invalid argument
<br><br>
//and this one too
2019-12-26 18:33:59.065 26392-26392/? E/libc: Access denied finding property "persist.vendor.sys.activitylog"
2019-12-26 18:34:02.040 26392-26392/com.rifinew.rumahpohon E/ANR_LOG: >>> msg's executing time is too long
2019-12-26 18:34:02.040 26392-26392/com.rifinew.rumahpohon E/ANR_LOG: Blocked msg = { when=-2s949ms what=110 target=android.app.ActivityThread$H obj=AppBindData{appInfo=ApplicationInfo{98d9e1e com.rifinew.rumahpohon}} } , cost  = 2929 ms
2019-12-26 18:34:02.040 26392-26392/com.rifinew.rumahpohon E/ANR_LOG: >>>Current msg List is:
2019-12-26 18:34:02.042 26392-26392/com.rifinew.rumahpohon E/ANR_LOG: Current msg <1>  = { when=-2s945ms what=159 target=android.app.ActivityThread$H obj=ClientTransaction hashCode, mActivityToken = android.os.BinderProxy@ada6ff }
2019-12-26 18:34:02.043 26392-26392/com.rifinew.rumahpohon E/ANR_LOG: Current msg <2>  = { when=-2s688ms what=149 target=android.app.ActivityThread$H obj=android.os.BinderProxy@ada6ff }
2019-12-26 18:34:02.043 26392-26392/com.rifinew.rumahpohon E/ANR_LOG: >>>CURRENT MSG DUMP OVER<<<
2019-12-26 18:34:02.545 26392-26426/com.rifinew.rumahpohon E/OpenGLRenderer: Device claims wide gamut support, cannot find matching config, error = EGL_SUCCESS
2019-12-26 18:34:02.605 26392-26426/com.rifinew.rumahpohon E/ion: ioctl c0044901 failed with code -1: Invalid argument
//begining of the crash
    --------- beginning of crash
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.rifinew.rumahpohon, PID: 26392
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.rifinew.rumahpohon/com.rifinew.rumahpohon.FoodDetailActivity}: android.view.InflateException: Binary XML file line #149: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3181)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3318)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:113)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:71)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2044)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:226)
        at android.app.ActivityThread.main(ActivityThread.java:7212)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:576)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:956)
     Caused by: android.view.InflateException: Binary XML file line #149: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:784)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:900)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:861)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:903)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:861)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:903)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:861)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469)
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
        at com.rifinew.rumahpohon.FoodDetailActivity.onCreate(FoodDetailActivity.java:40)
        at android.app.Activity.performCreate(Activity.java:7378)
        at android.app.Activity.performCreate(Activity.java:7369)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3161)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3318)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:113)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:71)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2044)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:226)
        at android.app.ActivityThread.main(ActivityThread.java:7212)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:576)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:956)

The XML activity_food_detail.xml is a little bit complex I think it's not good to put the code here. What have I done wrong?

The Problem is i dont know why, but the XML

<!-- <view
                android:layout_width="1dp"
                android:layout_height="match_parent"
                android:layout_marginTop="10dp"
                android:layout_marginBottom="10dp"
                android:background="@color/colorPrimary"/>-->

VIEW tag that draw a little Line somehow made an error crash on my phone, thankyou for @unownsp for helping me through this error

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM