android - ListView 不显示任何项目

标签 android arrays listview azure-sql-database

我正在创建一个 ListView ,通过带有 where 语句的 SQL 查询从我的 azure 数据库中获取我的项目。我的代码可以运行,但是当我尝试使用 [] 搜索屏幕底部显示的内容时,toast 是我的代码:

@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 = new ArrayList();

            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;
    }



   }

}

最佳答案

您正在使用此 MyData 变量作为适配器的数据源:

List<Map<String,String>> MyData = new ArrayList();
...
ADAhere = new SimpleAdapter(getActivity(), MyData,R.layout.list_products, fromwhere, viewswhere);
 ...
 list.setAdapter(ADAhere);

而且您既没有向直接数据源 MyData 添加任何内容,也没有通过适配器 ADAhere 添加任何内容。

编辑:

解决此问题的方法是,将数据变量设为全局变量(将其移至 onCreateView() 之前:

List<Map<String,String>> MyData = new ArrayList();

然后在您的异步任务中调用 add 以向其添加数据:

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"));
                        MyData.add(datanum);
                    }
                     ADAhere.notifyDatasetChanged()

当您完成将数据加载到 MyData 时,只需调用 ADAhere.notifyDatasetChanged()。

关于android - ListView 不显示任何项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49969074/

相关文章:

javascript - 在 JavaScript 俄罗斯方 block 中绘制新的俄罗斯方 block

ScrollView 中的 Android ListView 行未完全显示 - 已剪辑

Android 似乎像 8 位 PNG 一样渲染框阴影,有人知道如何解决这个问题吗?

android - ListView/ListAdapter 从列表中找回对象

C++ Builder 如何用 vector 构建动态对象?

JavaFX ListView selectedItemProperty 未在clearSelection(index) 上触发

android - 使用 JSoup 将 html 表解析为 listview android

android - simple_spinner_dropdown_item - View 大小

android - 在 Android 中检测蓝牙 Le 设备

c - 通过使用 getchar 而不是 scanf 将 2 个大整数存储在数组中 - C 编程