【问题标题】:Add items to array with a search通过搜索将项目添加到数组
【发布时间】:2018-04-22 17:10:47
【问题描述】:

我正忙于创建一个应用程序,我想将用户搜索过的所有项目存储在一个数组中,然后显示它。当我运行我的代码时,我收到以下错误:

Process: com.digitialninja.mohammed.curtainclub, PID: 15718
 java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
   at android.widget.SimpleAdapter.getCount(SimpleAdapter.java:100)
   at android.widget.ListView.setAdapter(ListView.java:556)
   at com.digitalninja.mohammed.curtainclub.Srail$1.onClick(Srail.java:60)
   at android.view.View.performClick(View.java:6213)
   at android.widget.TextView.performClick(TextView.java:11074)
   at android.view.View$PerformClick.run(View.java:23645)
   at android.os.Handler.handleCallback(Handler.java:751)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6692)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)

我正在使用 SQL 查询,它在我的天蓝色数据库中检查记录,然后从逻辑上讲它必须将其添加到数组中,并且我的自定义列表视图应该从那里显示所有搜索的项目。这是我的代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.srail, container, false);
    search = (Button)rootView.findViewById(R.id.btnSearch);
    Esearch = (EditText)rootView.findViewById(R.id.srch);
    list = (ListView)rootView.findViewById(R.id.raill);

    search.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            CheckLogin checkLogin = new CheckLogin();
            checkLogin.execute("");

            List<Map<String,String>> MyData = null;

            String[] fromwhere = { "NAME","PRICE","RANGE","SUPPLIER","SIZE" };

            int[] viewswhere = {R.id.Name_txtView , R.id.price_txtView,R.id.Range_txtView,R.id.size_txtView,R.id.supplier_txtView};

            ADAhere = new SimpleAdapter(getActivity(), MyData,R.layout.list_products, fromwhere, viewswhere);

            list.setAdapter(ADAhere);


            list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    HashMap<String,Object> obj=(HashMap<String,Object>)ADAhere.getItem(position);
                    String ID=(String)obj.get("A");
                    Toast.makeText(getActivity(), ID, Toast.LENGTH_SHORT).show();

                }
            });
        }
    });


    return rootView;
}


public class CheckLogin extends AsyncTask<String, String, String> {
    String z = "";
    Boolean isSuccess = false;

    ProgressDialog progress;

    @Override
    protected void onPreExecute() {
        progress = ProgressDialog.show(getActivity(), "Searching...",
                "Listview Loading! Please Wait...", true);
    }

    @Override
    protected void onPostExecute(String r) {
        progress.dismiss();
        Toast.makeText(getActivity(), r, Toast.LENGTH_SHORT).show();
        if (isSuccess) {
            Toast.makeText(getActivity(), "Search Successfull", Toast.LENGTH_LONG).show();


            //finish();
        }
    }

    @Override
    protected String doInBackground(String... strings) {
        String Search = search.getText().toString();


        if (Search.trim().equals(""))
            z = "Please Search something";
        else {
            List<Map<String, String>> data = null;
            data = new ArrayList<Map<String, String>>();
            try {
                ConnectionHelper conStr = new ConnectionHelper();
                connect = conStr.connectionclass();        // Connect to database
                if (connect == null) {
                    z = "Check Your Internet Access!";
                } else {
                    // Change below query according to your own database.
                    String query = "select * from cc_rail where rail_name='" + Search.toString() + "' OR RAIL_UNIT_PRICE= '" + Search.toString() + "' OR RAIL_RANGE= '" + Search.toString() + "' OR RAIL_SUPPLIER='" + Search.toString() + "' OR RAIL_SIZE='" + Search.toString() + "'";
                    Statement stmt = connect.createStatement();
                    ResultSet rs = stmt.executeQuery(query);
                    while (rs.next()) {
                        Map<String, String> datanum = new HashMap<String, String>();
                        datanum.put("NAME", rs.getString("RAIL_NAME"));

                        datanum.put("PRICE", rs.getString("RAIL_UNIT_PRICE"));

                        datanum.put("RANGE", rs.getString("RAIL_RANGE"));

                        datanum.put("SUPPLIER", rs.getString("RAIL_SUPPLIER"));

                        datanum.put("SIZE", rs.getString("RAIL_SIZE"));
                        data.add(datanum);
                    }


                    z = " successful";
                    isSuccess = true;
                    connect.close();
                }
            } catch (Exception ex) {
                isSuccess = false;
                z = ex.getMessage();
            }

            return String.valueOf(data);
        }
        return z;
    }

    }

}

【问题讨论】:

    标签: android arrays listview azure-sql-database


    【解决方案1】:
    List<Map<String,String>> MyData = null;
    
    ADAhere = new SimpleAdapter(getActivity(), MyData,R.layout.list_products, fromwhere, viewswhere);
    

    在 OnCreateView() 方法的这两行中,MyData 为 null,您将其传递给 SimpleAdapter

    只需用适当的数据填充 MyData,您的问题就会得到解决。

    【讨论】:

      【解决方案2】:

      根据异常的堆栈跟踪,它正在抛出一个NullPointerException

      当您尝试访问 null 对象上的方法或属性时,将引发 NullPointerException

      查看您的代码后,我认为出现异常是因为您将MyData 作为null 传递给一个方法。

      我认为初始化MyData 对象将修复异常。

      类似这样的:
      List&lt;Map&lt;String,String&gt;&gt; MyData = new ArrayList();

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2022-01-13
        • 2019-11-30
        • 2019-03-18
        • 1970-01-01
        • 2020-01-23
        • 1970-01-01
        • 1970-01-01
        • 2012-11-20
        • 1970-01-01
        相关资源
        最近更新 更多