Я использую List View Activity для отправки данных в Edit Data Activity, в чем здесь проблема? - PullRequest
0 голосов
/ 10 апреля 2019

Я получаю имя элемента, описание элемента и цену элемента из базы данных, когда пользователь нажимает на элемент, он переходит к операции редактирования, где пользователь может обновить или удалить данные, но когда я нажимаю на элемент списка, он возвращает меня к Основная деятельность

Когда пользователь нажимает на данные представления, он отображает представление списка после нажатия на просмотр списка пользователь должен перейти к редактированию данных активности, где при редактировании данных данные активности будут отображаться в полях редактирования текстов для обновления или удаления

мой код работал нормально с одним именем элемента параметра, но когда я использовал описание элемента и цену элемента, появляется эта ошибка

main activity

edit data activity

private static final String TAG = "ListDataActivity";

DatabaseHelper mDatabaseHelper;

private ListView mListView;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list_data);
    mListView = (ListView) findViewById(R.id.listView);
    mDatabaseHelper = new DatabaseHelper(this);

    populateListView();
}

private void populateListView() {
    Log.d(TAG, "populateListView: Displaying data in the ListView.");

    Cursor data = mDatabaseHelper.getData();
    ArrayList<String> listData = new ArrayList<>();
    while(data.moveToNext()){
        listData.add(data.getString(1));
    }
    ListAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, listData);
    mListView.setAdapter(adapter);
    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            String name = adapterView.getItemAtPosition(i).toString();
            String des = adapterView.getItemAtPosition(i).toString();
            String pri = adapterView.getItemAtPosition(i).toString();

            Log.d(TAG, "onItemClick: You Clicked on " + name);

            Cursor data = mDatabaseHelper.getItemID(name, des, pri); //get the id associated with that name
            int itemID = -1;
            while(data.moveToNext()){
                itemID = data.getInt(0);
            }
            if(itemID > -1){
                Log.d(TAG, "onItemClick: The ID is: " + itemID);
                Intent intent = new Intent(ListDataActivity.this, EditDataActivity.class);
                Bundle extras = new Bundle();
                extras.putInt("id",itemID);
                extras.putString("name",name);
                extras.putString("description",des);
                extras.putString("price",pri);
                intent.putExtras(extras);

                startActivity(intent);
            }
            else{
                toastMessage("No ID associated with that name");
            }
        }
    });
}


private void toastMessage(String message){
    Toast.makeText(this,message, Toast.LENGTH_SHORT).show();
}

новый обновленный код, я внес следующие изменения

    package com.example.saveanddisplaysql;


    import android.content.Intent;
    import android.database.Cursor;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v7.app.AppCompatActivity;
    import android.util.Log;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListAdapter;
    import android.widget.ListView;
    import android.widget.Toast;

    import java.util.ArrayList;



    public class ListDataActivity extends AppCompatActivity {

        private static final String TAG = "ListDataActivity";

        DatabaseHelper mDatabaseHelper;

        private ListView mListView;

        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_list_data);
            mListView = (ListView) findViewById(R.id.listView);
            mDatabaseHelper = new DatabaseHelper(this);

            populateListView();
        }

        private void populateListView() {
            Log.d(TAG, "populateListView: Displaying data in the ListView.");

            Cursor data = mDatabaseHelper.getData();
            class Model {
                String name;
                String desc;
                int price;
            }
            ArrayList< Model> listData = new ArrayList<>();

            while(data.moveToNext()){ 
            Model model = new Model();
            model.name = data.getString(1); 
            model.desc = data.getString(2); 
            model.price = data.getInt(3); 
            listData.add(model); }
            ListAdapter adapter = new ArrayAdapter<>(this, 
            android.R.layout.simple_list_item_1, listData);
            mListView.setAdapter(adapter);
            mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                    Model model = (Model)adapterView.getItemAtPosition(i);
            String name = model.name;
            String des = model.des;
            String pri = model.pri;

            Log.d(TAG, "onItemClick: You Clicked on " + name);

            Cursor data = mDatabaseHelper.getItemID(name, des, pri); //get the id associated with these
                    int itemID = -1;
                    while(data.moveToNext()){
                        itemID = data.getInt(0);
                    }
                    if(itemID > -1){
                        Log.d(TAG, "onItemClick: The ID is: " + itemID);
                        Intent intent = new Intent(ListDataActivity.this, EditDataActivity.class);
                        Bundle extras = new Bundle();
                        extras.putInt("id",itemID);
                        extras.putString("name",name);
                        extras.putString("description",des);
                        extras.putString("price",pri);
                        intent.putExtras(extras);

                        startActivity(intent);
                    }
                    else{
                        toastMessage("No ID associated with that name");
                    }
                }
            });
        }


        private void toastMessage(String message){
            Toast.makeText(this,message, Toast.LENGTH_SHORT).show();
        }
    }

enter image description here

Logcat:

2019-04-11 10: 51: 34.331 32717-32717 /? I / art: Позднее включение -Xcheck: jni 2019-04-11 10: 51: 34.351 32717-32717 /? D / TidaProvider: TidaProvider () 2019-04-11 10: 51: 34.364 32717-32717 / com.example.saveanddisplaysql W / ReflectionUtils: java.lang.NoSuchMethodException: android.os.MessageQueue # enableMonitor () # bestmatch в miui.util.ReflectionUtils.findMethodBestMatch (ReflectionUtils.java:338) в miui.util.ReflectionUtils.findMethodBestMatch (ReflectionUtils.java:375) в miui.util.ReflectionUtils.callMethod (ReflectionUtils.java:800) в miui.util.ReflectionUtils.tryCallMethod (ReflectionUtils.java:818) на android.os.BaseLooper.enableMonitor (BaseLooper.java:47) на android.os.Looper.prepareMainLooper (Looper.java:112) на android.app.ActivityThread.main (ActivityThread.java:6221) в java.lang.reflect.Method.invoke (родной метод) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:904) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:794)

1 Ответ

0 голосов
/ 10 апреля 2019

Ваш "listData" ArrayList является списком массивов типа String. Таким образом, вы можете добавить только строки в нем. Вам нужно создать класс вроде

class Model {
    String name;
    String desc;
    int price;
} 

Затем создайте список массивов вашей модели.

ArrayList< Model> listData = new ArrayList<>();

Затем передайте эту модель ArrayList адаптеру, и вы можете получить ее в любое время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...