ListView.setAdapter (android.widget.ListAdapter) 'для ссылки на пустой объект - PullRequest
0 голосов
/ 17 октября 2019

Я хочу иметь просмотр списка. Но я получаю ошибку ниже.

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.photoapp/com.example.photoapp.ViewAdmins}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference

Вот мой код.

 public class ViewAdmins extends AppCompatActivity {

    SyncAdminsDatabaseHelper mSyncAdminsDatabaseHelper;
    private ListView ymListView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_data);

        ymListView = (ListView) findViewById(R.id.listviewadmins);
        mSyncAdminsDatabaseHelper = new SyncAdminsDatabaseHelper(this);

        //call method populateListView();
        populateListView();

    }
    private void populateListView(){

        //get the data to append in the list view
        Cursor data = mSyncAdminsDatabaseHelper.getData();

        if(data.getCount() == 0){
            toastMessage("The database is empty.");
        }else{

            //Create an Array list
            ArrayList<String> listData = new ArrayList<>();

            //Store the result in array using while loop
            while (data.moveToNext()){
                //get the value from the database in column 1
                //than add to array list
                listData.add(data.getString(0));

            }
            System.out.println(listData);
//        //create the list adapter and set the adapter
            ListAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,listData);
           ymListView.setAdapter(adapter);


        }


    }

Я хочу показать данные из таблицы приложения в виде списка. Но по какой-то причине мой список не отображает данные должным образом.

Мой вопрос заключается в том, как получить данные из таблицы SQLite и отобразить их в виде списка.

А также как отобразить несколько полей в представлении списка.

Activity_view_admins.xml код

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ViewAdmins">


    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listviewadmins">

    </ListView>
</LinearLayout>

1 Ответ

0 голосов
/ 17 октября 2019

вот то, что я сделал пару лет назад, но вместо чтения из SQL lite я читаю из моего веб-сервиса. но это должно дать вам представление о том, как заполнить список.

   public class MainActivity extends AppCompatActivity {
    private static final String url = "http://10.0.2.2/android_app/urltomywebservice";
    private ProgressDialog dialog;
    private List<Item> array = new ArrayList<Item>();
    private ListView listView;
    private Adapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView) findViewById(R.id.list_item);
        adapter=new Adapter(this,array);
        listView.setAdapter(adapter);

        dialog=new ProgressDialog(this);
        dialog.setMessage("Loading...");
        dialog.show();

        //Creat volley request obj
        JsonArrayRequest jsonArrayRequest=new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                hideDialog();
                //parsing json
                for(int i=0;i<response.length();i++){
                    try{
                        JSONObject obj=response.getJSONObject(i);
                        Item item=new Item();
                        item.setTitle(obj.getString("Title"));
                        item.setImage(obj.getString("Image"));
                        item.setRate(obj.getInt("rating"));
                        item.setPrice(obj.getInt("Price"));



                        //add to array
                        array.add(item);
                    }catch(JSONException ex){
                        ex.printStackTrace();
                    }
                }
                adapter.notifyDataSetChanged();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
        AppController.getmInstance().addToRequesQueue(jsonArrayRequest);
    }
    public void hideDialog(){
        if(dialog !=null){
            dialog.dismiss();
            dialog=null;
        }
    }

    }

здесь массив, который я добавляю в список, - это список, в котором моя модель для установки и получения необходимых данных. Вы можете создать что-то похожее, если оно вам подходит.

private List<Item> array = new ArrayList<Item>();
...