当前位置: 代码迷 >> Android >> 如何将数据从Mysql数据库加载到android listview
  详细解决方案

如何将数据从Mysql数据库加载到android listview

热度:75   发布时间:2023-08-04 10:44:25.0

我创建了 php+mysql 数据库服务器,创建了一个包含四个字段(id、name、info、img)的数据库,四个字段是文本类型,我将此数据转换为 json url: : 现在我想将此 json url 加载到包含三个文本视图和图像视图的列表视图中

public class ByCategoryMenu extends Activity {
    RequestQueue requestQueue;
    String url = "http://giclub.esy.es/show.php";
    TextView textView;
    ListView listView;
    ArrayList<listitme> listitmes = new ArrayList<listitme>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.bycategorydetails);

        textView = (TextView) findViewById(R.id.textView);
        listView = (ListView) findViewById(R.id.listView);

        requestQueue = Volley.newRequestQueue(this);
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {

                        try {
                JSONArray jsonArray = response.getJSONArray("allstudents");
                            for (int i = 0; i < jsonArray.length(); i++) {
                         JSONObject respons = jsonArray.getJSONObject(i);
                                String id = respons.getString("id");
                                String name = respons.getString("name");
                                String info = respons.getString("info");
                                String img = respons.getString("img");
                       listitmes.add(new listitme(id, name, info, img));
                                listAllItme();
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("VOLLEY", "ERROR");
            }
        }

        );
        requestQueue.add(jsonObjectRequest);
    }

    public void listAllItme() {
        listAdpter lA = new listAdpter(listitmes);
        listView.setAdapter(lA);
    }

    class listAdpter extends BaseAdapter {
        ArrayList<listitme> listA = new ArrayList<listitme>();
        public listAdpter(ArrayList<listitme> listA) {
            this.listA = listA;
        }
        @Override
        public int getCount() {
            return listA.size();
        }
        @Override
        public Object getItem(int position) {
            return listA.get(position).id;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
     public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater layoutInflater = getLayoutInflater();
            View view = layoutInflater.inflate(R.layout.row_itm, null);
            TextView id = (TextView) view.findViewById(R.id.textView_id);
           TextView name = (TextView) view.findViewById(R.id.textView_name);
           TextView info = (TextView) view.findViewById(R.id.textView_info);
            ImageView img = (ImageView) view.findViewById(R.id.imageView);
            id.setText(listA.get(position).id);
            name.setText(listA.get(position).name);
            info.setText(listA.get(position).info);             Picasso.with(ByCategoryMenu.this).load("http://giclub.esy.es/image/" + listA.get(position).img).into(img);
            return view;
        }
    }
}

我创建了 listitem 类

public class listitme {
    public String id;
    public String name;
    public String info;
    public String img;
    public listitme( String id, String name, String info, String img) {
        this.id = id;
        this.name = name;
        this.info = info;
        this.img = img;
    }
}

row_itm.xml

<TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="Small Text"
        android:id="@+id/textView_id"
        android:textColor="#fa0000" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:id="@+id/textView_name"
        android:textColor="@color/accent_material_light" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Medium Text"
        android:id="@+id/textView_info" />
    <ImageView
        android:layout_width="200dp"
        android:layout_height="200dp"
        />

bycategorydetalis.xml

<ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listView"/>

显示.php

<?php
    include("config.php");
    header('Content-Type: application/json; charset=utf-8');
    $result = mysqli_query($db, 'SELECT * FROM student');
    $stu = array(); 
    while ($row = mysqli_fetch_array($result)) {
        array_push($stu,$row);
    }
echo "{allstudents : ".json_encode($stu);
?>

logcat 是

D/dalvikvm: create interp thread : stack size=128KB
D/dalvikvm: create new thread
D/dalvikvm: new thread created
D/dalvikvm: update thread list
D/dalvikvm: threadid=20: interp stack at 0x626bf000
D/dalvikvm: threadid=20: created from interp
D/dalvikvm: start new thread
D/dalvikvm: threadid=20: notify debugger
D/dalvikvm: threadid=20 (Picasso-refQueue): calling run()
D/AndroidRuntime: Shutting down VM
W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x41d2dcf8)
W/dalvikvm: threadid=1: uncaught exception occurred
W/System.err: java.lang.IllegalArgumentException: Target must not be null.
W/System.err:     at com.squareup.picasso.RequestCreator.into(RequestCreator.java:618)
W/System.err:     at com.squareup.picasso.RequestCreator.into(RequestCreator.java:601)
W/System.err:     at com.example.amr.fujeraapp.ByCategoryMenu$listAdpter.getView(ByCategoryMenu.java:136)
W/System.err:     at android.widget.AbsListView.obtainView(AbsListView.java:2338)
W/System.err:     at android.widget.ListView.makeAndAddView(ListView.java:1812)
W/System.err:     at android.widget.ListView.fillDown(ListView.java:698)
W/System.err:     at android.widget.ListView.fillFromTop(ListView.java:759)
W/System.err:     at android.widget.ListView.layoutChildren(ListView.java:1645)
W/System.err:     at android.widget.AbsListView.onLayout(AbsListView.java:2149)
W/System.err:     at android.view.View.layout(View.java:15125)
W/System.err:     at android.view.ViewGroup.layout(ViewGroup.java:4862)
W/System.err:     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1888)
W/System.err:     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1742)
W/System.err:     at android.widget.LinearLayout.onLayout(LinearLayout.java:1651)
W/System.err:     at android.view.View.layout(View.java:15125)
W/System.err:     at android.view.ViewGroup.layout(ViewGroup.java:4862)
W/System.err:     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515)
W/System.err:     at android.widget.FrameLayout.onLayout(FrameLayout.java:450)
W/System.err:     at android.view.View.layout(View.java:15125)
W/System.err:     at android.view.ViewGroup.layout(ViewGroup.java:4862)
W/System.err:     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1888)
W/System.err:     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1742)
W/System.err:     at android.widget.LinearLayout.onLayout(LinearLayout.java:1651)
W/System.err:     at android.view.View.layout(View.java:15125)
W/System.err:     at android.view.ViewGroup.layout(ViewGroup.java:4862)
W/System.err:     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515)
W/System.err:     at android.widget.FrameLayout.onLayout(FrameLayout.java:450)
W/System.err:     at android.view.View.layout(View.java:15125)
W/System.err:     at android.view.ViewGroup.layout(ViewGroup.java:4862)
W/System.err:     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2317)
W/System.err:     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2023)
W/System.err:     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1189)
W/System.err:     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6223)
W/System.err:     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:788)
W/System.err:     at android.view.Choreographer.doCallbacks(Choreographer.java:591)
W/System.err:     at android.view.Choreographer.doFrame(Choreographer.java:560)
W/System.err:     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:774)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:808)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:103)
W/System.err:     at android.os.Looper.loop(Looper.java:193)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5333)
W/System.err:     at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err:     at java.lang.reflect.Method.invoke(Method.java:515)
W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644)
W/System.err:     at dalvik.system.NativeStart.main(Native Method)
W/dalvikvm: threadid=1: calling UncaughtExceptionHandler
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.amr.fujeraapp, PID: 13372
                  java.lang.IllegalArgumentException: Target must not be null.
                      at com.squareup.picasso.RequestCreator.into(RequestCreator.java:618)
                      at com.squareup.picasso.RequestCreator.into(RequestCreator.java:601)
                      at com.example.amr.fujeraapp.ByCategoryMenu$listAdpter.getView(ByCategoryMenu.java:136)
                      at android.widget.AbsListView.obtainView(AbsListView.java:2338)
                      at android.widget.ListView.makeAndAddView(ListView.java:1812)
                      at android.widget.ListView.fillDown(ListView.java:698)
                      at android.widget.ListView.fillFromTop(ListView.java:759)
                      at android.widget.ListView.layoutChildren(ListView.java:1645)
                      at android.widget.AbsListView.onLayout(AbsListView.java:2149)
                      at android.view.View.layout(View.java:15125)
                      at android.view.ViewGroup.layout(ViewGroup.java:4862)
                      at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1888)
                      at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1742)
                      at android.widget.LinearLayout.onLayout(LinearLayout.java:1651)
                      at android.view.View.layout(View.java:15125)
                      at android.view.ViewGroup.layout(ViewGroup.java:4862)
                      at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515)
                      at android.widget.FrameLayout.onLayout(FrameLayout.java:450)
                      at android.view.View.layout(View.java:15125)
                      at android.view.ViewGroup.layout(ViewGroup.java:4862)
                      at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1888)
                      at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1742)
                      at android.widget.LinearLayout.onLayout(LinearLayout.java:1651)
                      at android.view.View.layout(View.java:15125)
                      at android.view.ViewGroup.layout(ViewGroup.java:4862)
                      at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515)
                      at android.widget.FrameLayout.onLayout(FrameLayout.java:450)
                      at android.view.View.layout(View.java:15125)
                      at android.view.ViewGroup.layout(ViewGroup.java:4862)
                      at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2317)
                      at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2023)
                      at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1189)
                      at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6223)
                      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:788)
                      at android.view.Choreographer.doCallbacks(Choreographer.java:591)
                      at android.view.Choreographer.doFrame(Choreographer.java:560)
                      at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:774)
                      at android.os.Handler.handleCallback(Handler.java:808)
                      at android.os.Handler.dispatchMessage(Handler.java:103)
                      at android.os.Looper.loop(Looper.java:193)
                      at android.app.ActivityThread.main(ActivityThread.java:5333)
                      at java.lang.reflect.Method.invokeNative(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:515)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644)
                      at dalvik.system.NativeStart.main(Native Method)

在这个问题上有什么帮助吗?

在处理来自 volley 的响应后在适配器中设置数据,而不是在 for 循环中,因此,在 for 循环之外调用 listAllItme() 方法。

  相关解决方案