如何将mysql listview数据加载到片段中

时间:2017-02-18 18:40:08

标签: android listview android-fragments

我想将mysql数据加载到listview中 其中包含先前存储在mysql数据库中的图像和文本视图 这是我的代码,但它在getLayoutInflater中显示错误 我怎么能这样做?

public class NewsFragment extends Fragment {
    RequestQueue requestQueue;
    String url = "http://giclub.esy.es/show.php";
    ListView listView;
    View myView;

    ArrayList<NewsList> Newslistitem = new ArrayList<NewsList>();

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        myView = inflater.inflate(R.layout.newslayout,container,false);
        listView = (ListView) myView.findViewById(R.id.listView);

        requestQueue = Volley.newRequestQueue(this.getActivity());
        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");
                                Newslistitem.add(new NewsList(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);
        return myView;
    }
    public void listAllItme() {
        listAdpter lA = new listAdpter(Newslistitem);
        listView.setAdapter(lA);
    }

   /* public void onClick(View view) {
        Intent intent = new Intent(this.getActivity(),NewsFragment.class);
        startActivity(intent);
        finish();
    }*/
    class listAdpter extends BaseAdapter {
        ArrayList<NewsList> listA = new ArrayList<NewsList>();

        public listAdpter(ArrayList<NewsList> 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.news_itm, null);
            //TextView id = (TextView) view.findViewById(R.id.textView_id);
            TextView name = (TextView) view.findViewById(R.id.textaddress);
            TextView info = (TextView) view.findViewById(R.id.text_info);
            ImageView img = (ImageView) view.findViewById(R.id.newspic);
            // id.setText(listA.get(position).id);
            name.setText(listA.get(position).name);
            info.setText(listA.get(position).info);
            Picasso.with(NewsFragment.this.getActivity()).load("http://giclub.esy.es/image/" + listA.get(position).img).into(img);
            return view;
        }
    }
}

NewsList.java

public class NewsList {
    public String id;
    public String name;
    public String info;
    public String img;

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

news_itm.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/newspic"
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:layout_gravity="center"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_alignParentEnd="true" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="اقرأ المزيد"
            android:textAlignment="center"
            android:id="@+id/text_info"
            android:layout_gravity="center"
            android:layout_centerVertical="true"
            android:layout_alignParentStart="true"
            android:layout_marginStart="35dp" />

        <TextView
            android:text="TextView"
            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="27dp"
            android:textSize="15dp"
            android:id="@+id/textaddress"
            android:layout_alignParentTop="true"
            android:layout_alignParentStart="true" />

    </RelativeLayout>

</LinearLayout>

我该怎么做?

2 个答案:

答案 0 :(得分:0)

首先我会建议在ui和数据访问之间拆分代码,然后在不同的威胁而不是ui线程中加载数据

首先尝试使用虚拟数据加载屏幕以检查布局和屏幕是否正常工作然后将其连接到&#34; DAL&#34;使用您保存的数据

答案 1 :(得分:0)

当您的布局为**news_itm.xml**

时,您正在给newslayout充气
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
 myView inflater.inflate(R.layout.**newslayout**,container,false);