如何在Android上的RecyclerView中显示其他JsonArray

时间:2016-05-01 12:09:58

标签: android json

我想开发一个网站的Android应用程序。我阅读了来自json的网站帖子,并在RecyclerView每10个帖子中显示该帖子,当用户在RecyclerView上滚动显示更多10个帖子并结束时!在这个项目中,我使用okHTTP v3RecyclerView
我希望在textview中显示来自title的{​​{1}},但我不知道如何显示这个内容?!
我的Json:

categories

我从这个数组中读到了这个标题:

{
    "status": "ok",
    "count": 10,
    "count_total": 28,
    "pages": 3,
    "posts": [{
        "id": 145,
        "type": "post",
        "slug": "english-post-2",
        "url": "http:\/\/tellfa.com\/tafrihgah\/?p=145",
        "status": "publish",
        "title": "English Post",
        "title_plain": "English Post",
        "content": "<p>This post is test for show Text and Image<\/p>\n<p><img class=\"alignnone size-medium wp-image-79\" src=\"http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/04\/WallpapersMania_vol49-027-300x240.jpg\" alt=\"[WallpapersMania]_vol49-027\" width=\"300\" height=\"240\" srcset=\"http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/04\/WallpapersMania_vol49-027-300x240.jpg 300w, http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/04\/WallpapersMania_vol49-027-768x614.jpg 768w, http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/04\/WallpapersMania_vol49-027-1024x819.jpg 1024w, http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/04\/WallpapersMania_vol49-027.jpg 1280w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>This is image in Text<\/p>\n",
        "excerpt": "<p>This post is test for show Text and Image<\/p>\n<p>This is image in Text<\/p>\n",
        "date": "2016-05-01 08:20:39",
        "modified": "2016-05-01 08:20:39",
        "categories": [{
            "id": 1,
            "slug": "%d8%af%d8%b3%d8%aa%d9%87%e2%80%8c%d8%a8%d9%86%d8%af%db%8c-%d9%86%d8%b4%d8%af%d9%87",
            "title": "\u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc \u0646\u0634\u062f\u0647",
            "description": "",
            "parent": 0,
            "post_count": 24
        }],
        "tags": [],
        "author": {
            "id": 1,
            "slug": "tellfa",
            "name": "\u0645\u062d\u0645\u062f",
            "first_name": "",
            "last_name": "",
            "nickname": "\u0645\u062d\u0645\u062f",
            "url": "http:\/\/codesaz.com",
            "description": "\u0627\u06cc\u0646 \u0632\u0646\u062f\u06af\u06cc \u0646\u0627\u0645\u0647 \u0645\u0646 \u0627\u0633\u062a",
            "avatar": "76"
        },
        "comments": [],
        "attachments": [{
            "id": 146,
            "url": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/05\/WallpapersMania_vol33-031.jpg",
            "slug": "wallpapersmania_vol33-031",
            "title": "WallpapersMania_vol33-031",
            "description": "",
            "caption": "",
            "parent": 145,
            "mime_type": "image\/jpeg",
            "images": {
                "full": {
                    "url": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/05\/WallpapersMania_vol33-031.jpg",
                    "width": 1600,
                    "height": 1200
                },
                "thumbnail": {
                    "url": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/05\/WallpapersMania_vol33-031-150x150.jpg",
                    "width": 150,
                    "height": 150
                },
                "medium": {
                    "url": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/05\/WallpapersMania_vol33-031-300x225.jpg",
                    "width": 300,
                    "height": 225
                },
                "mediaphase-frontpage-news": {
                    "url": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/05\/WallpapersMania_vol33-031-300x220.jpg",
                    "width": 300,
                    "height": 220
                },
                "mediaphase-blog-large": {
                    "url": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/05\/WallpapersMania_vol33-031-700x313.jpg",
                    "width": 700,
                    "height": 313
                }
            }
        }],
        "comment_count": 0,
        "comment_status": "open",
        "thumbnail": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/05\/WallpapersMania_vol33-031-150x150.jpg",
        "custom_fields": {},
        "thumbnail_size": "thumbnail",
        "thumbnail_images": {
            "full": {
                "url": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/05\/WallpapersMania_vol33-031.jpg",
                "width": 1600,
                "height": 1200
            },
            "thumbnail": {
                "url": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/05\/WallpapersMania_vol33-031-150x150.jpg",
                "width": 150,
                "height": 150
            },
            "medium": {
                "url": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/05\/WallpapersMania_vol33-031-300x225.jpg",
                "width": 300,
                "height": 225
            },
            "mediaphase-frontpage-news": {
                "url": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/05\/WallpapersMania_vol33-031-300x220.jpg",
                "width": 300,
                "height": 220
            },
            "mediaphase-blog-large": {
                "url": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/05\/WallpapersMania_vol33-031-700x313.jpg",
                "width": 700,
                "height": 313
            }
        }
    }

我的AsyncTask代码:

"categories": [{
            "id": 1,
            "slug": "%d8%af%d8%b3%d8%aa%d9%87%e2%80%8c%d8%a8%d9%86%d8%af%db%8c-%d9%86%d8%b4%d8%af%d9%87",
            "title": "\u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc \u0646\u0634\u062f\u0647",
            "description": "",
            "parent": 0,
            "post_count": 24
        }],

MainActivity代码:

public class MainDataInfo {
    private Context mContext;
    private String ServerAddress = ServerIP.getIP();

    public void getMainDataInfo(Context context) {
        mContext = context;
        new getInfo().execute(ServerAddress + "page=1");
    }

    private class getInfo extends AsyncTask<String, Void, String> {
        EventBus bus = EventBus.getDefault();
        private String ou_response;
        private List<MainDataModel> infoModels;

        @Override
        protected void onPreExecute() {
            CustomProcessDialog.createAndShow(mContext);
            infoModels = new ArrayList<>();
        }

        @Override
        protected String doInBackground(String... params) {
            OkHttpClient client = new OkHttpClient();

            //String url = (String) params[0];
            Request request = new Request.Builder()
                    .url(ServerAddress + "page=1")
                    .cacheControl(CacheControl.FORCE_NETWORK)
                    .build();

            Response response;
            try {
                response = client.newCall(request).execute();
                ou_response = response.body().string();
                response.body().close();
                if (ou_response != null) {
                    try {
                        JSONObject postObj = new JSONObject(ou_response);
                        JSONArray postsArray = postObj.optJSONArray("posts");
                        infoModels = new ArrayList<>();

                        for (int i = 0; i <= infoModels.size(); i++) {
                            JSONObject postObject = (JSONObject) postsArray.get(i);
                            // Thumbnail
                            JSONObject images = postObject.optJSONObject("thumbnail_images");
                            JSONObject imagesPair = images.optJSONObject("medium");
                            // Author
                            JSONObject Author = postObject.optJSONObject("author");

                            int id = postObject.getInt("id");
                            String title = postObject.getString("title");
                            String content = postObject.getString("content");
                            String dateTime = postObject.getString("date");
                            String thumbnail = imagesPair.getString("url");
                            String authorShow = Author.getString("name");
                            Log.d("Data", "Post id: " + id);
                            Log.d("Data", "Post title: " + title);
                            Log.d("Data", "Post image: " + thumbnail);
                            Log.d("Data", "Post category: " + authorShow);

                            //Use the title and id as per your requirement
                            infoModels.add(new MainDataModel(id, title, content, dateTime, authorShow, thumbnail));
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return ou_response;
        }

        @Override
        protected void onPostExecute(String result) {
            CustomProcessDialog.dissmis();
            if (result != null) {
                bus.post(infoModels);

            }
        }
    }
}

注意:请不要给我负面评价,我是业余爱好者,我真的需要你的帮助!谢谢所有&lt; 3

2 个答案:

答案 0 :(得分:2)

在布局中添加RecyclerView

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

添加依赖项

compile 'com.android.support:recyclerview-v7:23.1.1'

为RecyclerView的每一行创建一个布局,并将其命名为list_row.xml

  <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusable="true"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="10dp"
    android:paddingBottom="10dp"
    android:clickable="true"
    android:background="?android:attr/selectableItemBackground"
    android:orientation="vertical">

    <TextView
        android:id="@+id/title"
        android:textColor="@color/title"
        android:textSize="16dp"
        android:textStyle="bold"
        android:layout_alignParentTop="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />



</RelativeLayout>

创建一个JAVA文件Model.java

public class Model {

    public String title;

}

现在创建名为Adapter.java

的java文件
    import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.List;

public class Adapter extends RecyclerView.Adapter<MoviesAdapter.MyViewHolder> {

    private ArrayList<Model> modelArrayList=new ArrayList<>();

    public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView title;

        public MyViewHolder(View view) {
            super(view);
            title = (TextView) view.findViewById(R.id.title);

        }
    }


    public Adapter(ArrayList<Model> modelArrayList) {
        this.modelArrayList = modelArrayList;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.list_row, parent, false);

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        Movie movie = moviesList.get(position);
        holder.title.setText(modelArrayList.get(position).title);

    }

    @Override
    public int getItemCount() {
        return modelArrayList.size();
    }
}
MainActivity.java

中的

创建Arrylist类型的Model

    ArrayList<Model> modelArrayList=new ArrayList<>();
 RecyclerView recyclerView;



recyclerView = (RecyclerView) findViewById(R.id.recycler_view);


        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(mLayoutManager);

prase data

JSONObject jsonObject = new JSONObject(ou_response);
JSONArray message = jsonObject.getJSONArray("categories");

for (int i = 0; i < message.length(); i++) {
                    Model model = new Model();
                    JSONObject temp = message.getJSONObject(i);
                    model.tittle = temp.getString("tittle");
                    modelArrayList.add(model);
}

创建适配器并将其设置为recyclerView

Adapter madapter = new Adapter(modelArrayList);

    recyclerView.setAdapter(mAdapter);

答案 1 :(得分:0)

在xml文件中创建RecyclerView:

&#13;
&#13;
<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
&#13;
&#13;
&#13;

在Activity类中声明RecyclerView和JsonArray:

&#13;
&#13;
   
    VolleyClass volleyClass;
    JSONArray jsonArray = new JSONArray();
    RecyclerAdapter recyclerAdapter;
    RecyclerView recyclerView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_head_two_head);
        volleyClass = VolleyClass.getInstance(this);
        //volleyClass=new VolleyClass(this);
        recyclerAdapter = new RecyclerAdapter();
     
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(HeadToHeadRandom.this, LinearLayoutManager.VERTICAL, false);
        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.setAdapter(recyclerAdapter);
&#13;
&#13;
&#13;

检索Json数据:

&#13;
&#13;
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST, URL.HEADTOHEAD_LIST.getURL(), urlObject, new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {
                Log.e("onResponse", response.toString());
                try {
                    jsonArray = response.getJSONArray("Categories");
                    if (jsonArray != null) {
                        
                        recyclerAdapter.notifyDataSetChanged();
                        
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                mDialog.dismiss();


            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                // TODO Auto-generated method stub
                mDialog.dismiss();

            }
        }) {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                HashMap<String, String> headers = new HashMap<String, String>();
                headers.put("Content-Type", "application/json; charset=utf-8");
                headers.put("User-agent", System.getProperty("http.agent"));
                return headers;
            }

            @Override
            public Priority getPriority() {
                return Priority.IMMEDIATE;
            }
        };

        volleyClass.addToRequestQueue(jsObjRequest);
&#13;
&#13;
&#13;

适配器类如下:

&#13;
&#13;
class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.HaderView> {
        @Override
        public HaderView onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_head_to_head, parent, false);
            lastItem = recyclerView.getChildAdapterPosition(view);
            return new HaderView(view);
        }

        @Override
        public void onBindViewHolder(HaderView holder, int position) {
            
            try {
                holder.tv_category.setText(jsonArray.getJSONObject(position).getString("title"));
                String image_path = jsonArray.getJSONObject(position).getString("icon");
                if (image_path != null) {
                    imageLoader.displayImage(image_path, holder.img_head_to_head, options);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

            final int posi = position;

            holder.tv_category.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    try {
                        String category_id = jsonArray.getJSONObject(posi).getString("id");
                        startActivity(new Intent(HeadToHead.this, HTHActivity.class).putExtra("category_id", category_id).putExtra("friend_userId", friend_Id));
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                }
            });

        }

        @Override
        public int getItemCount() {
            return jsonArray.length();
        }

        class HaderView extends RecyclerView.ViewHolder {
            TextView tv_category;
            ImageView img_head_to_head;

            HaderView(View v) {
                super(v);
                tv_category = (TextView) v.findViewById(R.id.tv_category);
                img_head_to_head = (ImageView) v.findViewById(R.id.img_head_to_head);
            }
        }

       
    }
&#13;
&#13;
&#13;