java - 带有自定义列表视图 Android 的 Mysql 数据库
问题描述
我正在尝试创建一个自定义列表视图,其中填充了我从在线数据库中获得的鸡尾酒数据。到目前为止,我得到了一个 simple_list_item_1,其中包含所有可能的鸡尾酒的名称,但现在我必须将基本列表视图替换为自定义列表视图,但我无法使其正常工作。我已经得到了几段单独工作的代码,但是当我尝试将它们组合起来时,它就不起作用了。
我做了一个mainActivity.java。我有两个版本:
- 第一个与在线数据库连接,但使用的是 simple_list_item_1。
- 第二个使用我的自定义 listview_item 但现在使用固定数组。
我想我必须用自定义 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;
}
}
}
解决方案
推荐阅读
- crafter-cms - Crafter 2.5.5:页面中缺少 objectGroudId
- algorithm - 元胞自动机模拟二维云
- python - 我安装了一个名为 Discord 的模块,在使用“import discord”时出现错误:“ModuleNotFoundError: No module named 'discord'”
- mysql - Is SHOW statement in SQL?
- c# - How can I hide browser of Selenium IEDriver?
- javascript - React - 从根 app.js 文件导出不起作用
- azure - 分布式交换操作
- ios - 由于缺少图标,Xcode Build 未提交
- linux - 在 Linux 中创建、锁定和解锁目录
- javascript - 从 json 列表中获取特定值 在邮递员测试中使用 javascript