首页 > 解决方案 > 带有自定义列表视图 Android 的 Mysql 数据库

问题描述

我正在尝试创建一个自定义列表视图,其中填充了我从在线数据库中获得的鸡尾酒数据。到目前为止,我得到了一个 simple_list_item_1,其中包含所有可能的鸡尾酒的名称,但现在我必须将基本列表视图替换为自定义列表视图,但我无法使其正常工作。我已经得到了几段单独工作的代码,但是当我尝试将它们组合起来时,它就不起作用了。

我做了一个mainActivity.java。我有两个版本:

我想我必须用自定义 listview_item 将 MainActivity.java 中的 ArrayAdapter 替换为来自在线数据库的数据和 MainActivity.java 中的 MyAdapter 类。但是当我更换它时,它不起作用。请有人告诉我如何使自定义列表视图与我的在线数据库一起使用?

MainActivity.java - 来自在线数据库的数据

public class MainActivity extends AppCompatActivity {

    ListView cocktailListview;

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

        cocktailListview = (ListView) findViewById(R.id.cocktailListview);
        getJSON("https://vd-berkmortel.nl/connection.php");
    }

    private void getJSON(final String urlWebService) {

        class GetJSON extends AsyncTask<Void, Void, String> {

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                try {
                    loadIntoListView(s);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            protected String doInBackground(Void... voids) {
                try {
                    URL url = new URL(urlWebService);
                    HttpURLConnection con = (HttpURLConnection) url.openConnection();
                    StringBuilder sb = new StringBuilder();
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
                    String json;
                    while ((json = bufferedReader.readLine()) != null) {
                        sb.append(json + "\n");
                    }
                    return sb.toString().trim();
                } catch (Exception e) {
                    return null;
                }
            }
        }
        GetJSON getJSON = new GetJSON();
        getJSON.execute();
    }

    private void loadIntoListView(String json) throws JSONException {
        JSONArray jsonArray = new JSONArray(json);
        String[] cocktail = new String[jsonArray.length()];
        String[] cocktailname = new String[jsonArray.length()];
        String[] cocktailTaste = new String[jsonArray.length()];
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject obj = jsonArray.getJSONObject(i);
            cocktail[i] = obj.getString("naam");
            cocktailname[i] = obj.getString("naam");
            cocktailTaste[i] = obj.getString("smaak");
        }
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, cocktail);
        cocktailListview.setAdapter(arrayAdapter);
    }
}

MainActivity.java - 使用自定义 listview_item 但使用硬编码数组

public class Cocktails extends AppCompatActivity {

    ListView cocktailListview;
    String cName[] = {"LONG ISLAND ICED TEA", "COSMOPOLITAN", "MARGARITA", "OLD FASHIONED"};
    String cMade[] = {"LONG ISLAND ICED TEA", "COSMOPOLITAN", "MARGARITA", "OLD FASHIONED"};
    int cImg[] = {R.drawable.longislandicetea, R.drawable.cosmopolitan, R.drawable.margarita, R.drawable.oldfashioned};

    private TextView menu_mixer_deselected;

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

        cocktailListview = findViewById(R.id.cocktailListview);

        MyAdapter adapter = new MyAdapter(this, cName, cMade, cImg);
        cocktailListview.setAdapter(adapter);
    }

    class MyAdapter extends ArrayAdapter<String> {
        Context context;
        String cName[];
        String cMade[];
        int cImg[];

        MyAdapter(Context c, String name[], String made[], int img[]) {
            super(c, R.layout.listview_cocktail_item, R.id.cName, name);
            this.context = c;
            this.cName = name;
            this.cMade = made;
            this.cImg = img;
        }

        @NonNull
        @Override
        public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
            LayoutInflater layoutInflater = (LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View listviewItem = layoutInflater.inflate(R.layout.listview_cocktail_item, parent, false);
            ImageView images = listviewItem.findViewById(R.id.CocktailListviewItem);
            TextView cocktailName = listviewItem.findViewById(R.id.cName);
            TextView cocktailMade = listviewItem.findViewById(R.id.cMade);

            images.setImageResource(cImg[position]);
            cocktailName.setText(cName[position]);
            cocktailMade.setText(cMade[position]);

            return listviewItem;
        }
    }
}

标签: javaandroidjsonlistview

解决方案


推荐阅读