php - 为什么我的 mysql 表的后续结果没有在 ListView 中创建新对象?

标签 php android mysql listview android-volley

我想为数据库中的表中的每个条目创建一个 ListView (简单适配器)到新 Activity 中。但是编译下面的代码后,我只能取回第一个条目。

我尝试通过更改 int i = 0 来看看是否可以获得第二个条目(我能够),并尝试更改 response.length() 看看将其更改为“3”是否会显示超过 1 个条目(我不能)。

我关注了this tutorial但我认为他的方法似乎已经过时了。我猜我正在尝试使用 Volley 。

这是从我的 php 文件生成的结果:

[ {"image_url":"https:\/\/kowhx.000webhostapp.com\/codes\/shop\/ny.png","name":"ny","price":"10.5"},
  {"image_url":"https:\/\/kowhx.000webhostapp.com\/codes\/shop\/ty.png","name":"ty","price":"11.5"}]

这是我的代码:

public class MenuList extends AppCompatActivity {

    private static final String TAG_NAME="name";
    private static final String TAG_PRICE="price";
    private static final String TAG_IMAGEURL="image_url";

    ListView list;
    private ArrayList<HashMap<String,String>> menuList;
    RequestQueue rq;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu_list);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                 Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

    rq = Volley.newRequestQueue(this);
    menuList = new ArrayList<>();
    list = (ListView) findViewById(R.id.menuListView);
    fetch();

}



public void fetch(){
    SharedPreferences sharedPreferences = getSharedPreferences(Config.SHARED_PREF_NAME, Context.MODE_PRIVATE);
    String url = "https://kowhx.000webhostapp.com/codes/getMenu.php?username="+sharedPreferences.getString(Config.EMAIL_SHARED_PREF,"Not Available");
    final JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {

            for (int i = 0; i < response.length(); i++) {
                HashMap<String, String> dish = new HashMap<>();
                try {
                    JSONObject jsonObject = response.getJSONObject(i);
                    String name = jsonObject.getString(TAG_NAME);
                    String price = jsonObject.getString(TAG_PRICE);
                    String imageUrl = jsonObject.getString(TAG_IMAGEURL);

                    dish.put(TAG_NAME, name);
                    dish.put(TAG_PRICE, price);
                    dish.put(TAG_IMAGEURL, imageUrl);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                menuList.add(dish);
            }
            ListAdapter adapter = new SimpleAdapter(MenuList.this, menuList, R.layout.menu_item, new String[]{TAG_NAME, TAG_PRICE, TAG_IMAGEURL}, new int[]{R.id.menuName, R.id.menuPrice, R.id.menuImage});
            list.setAdapter(adapter);
        }
    }, new Response.ErrorListener() {
        @Override
       public void onErrorResponse(VolleyError error) {

       }}
    );
    rq.add(jsonArrayRequest);

最佳答案

哦,实际上它可以工作,但只是我的布局使用nestedscrollview,所以 ListView 不会显示超过1个项目。如果我将其更改为相对布局,一切都会得到解决。

关于php - 为什么我的 mysql 表的后续结果没有在 ListView 中创建新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44229202/

相关文章:

php - 在 PHP 中关闭大括号后的分号

java - 将数组php转换为java

移动设备和 API 之间的 Java 集成测试。最好的方法是什么?

java - 是否可以使用 Hibernate 标准获取 Order 的连接表的 SQL 别名?

php - 试图制作一个名为 "List"的 CodeIgniter Controller

php - 从数组生成 jquery 列表

java - Android Studio - 导航 Activity 中的 2 个工具栏

android - ORMLite id 生成

php - 删除多个复选框上的行后未获取 $_GET 的值?

mysql - 在MySQL中加入联接删除