簡體   English   中英

ListView.setAdapter(android.widget.ListAdapter)' 在 null object 參考

[英]ListView.setAdapter(android.widget.ListAdapter)' on a null object reference

我想要一個列表視圖。 但我得到了錯誤。

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>

這是我幾年前所做的,但不是從 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;
        }
    }

    }

這里我添加到列表視圖的數組是我的 model 用於設置和獲取所需數據的列表。 如果適合您,您可以創建類似的東西。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM