AsyncTask и RecyclerView не отображают содержимое, полученное с JSON в Интернете - PullRequest
1 голос
/ 11 февраля 2020

Я делаю простую программу, в которой я могу получить контент из JSON по этому URL

https://www.haliminfo.com/feeds/posts/summary/?max-results=10&start-index=1&alt=json

и сделать его списком Использование RecyclerView для Android.

Я сделал несколько необходимых компонентов, таких как Модель, Адаптер, Элемент Post Row и HttpHandler

, когда я пробую RecyclerView с помощью метода, подобного этому это работает.

private void addData () {
    postsArrayList = new ArrayList <> ();
    postsArrayList.add (new Posts ("TITLE", "SUMMARY"));
}

, но когда я применяю метод ниже, в действии ничего не появляется

private class getContent extends AsyncTask <Void, Void, Void> {

        @ Override
        protected Void doInBackground (Void ... voids) {
            HttpHandler sh = new HttpHandler ();

            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall (URL_FIX);

            if (jsonStr! = null) {

                try {

                    JSONObject jsonObj = new JSONObject (jsonStr);

                    JSONObject feed = jsonObj.getJSONObject ("feed");
                    JSONArray entry = feed.getJSONArray ("entry");

                    Posts postsModel = new Posts ();

                    for (int i = 0; i <entry.length (); i ++) {

                        postsModel.setTitle (entry.getJSONObject (i) .getJSONObject ("title"). getString ("$ t"));
                        postsModel.setSummary (entry.getJSONObject (i) .getJSONObject ("summary"). getString ("$ t"));

                        postsArrayList.add (postsModel);

                    }

                } catch (final JSONException e) {
                    Log.e ("RESPONSE", "Json parsing error:" + e.getMessage ());
                    runOnUiThread (new Runnable () {
                        @ Override
                        public void run () {
                            Toast.makeText (getApplicationContext (),
                                    "Json parsing error:" + e.getMessage (),
                                    Toast.LENGTH_LONG)
                                    .show ();
                        }
                    });
                }

            } else {
                Log.e ("RESPONSE", "Couldn't get json from server.");
                runOnUiThread (new Runnable () {
                    @ Override
                    public void run () {
                        Toast.makeText (getApplicationContext (),
                                "Couldn't get json from server. Check LogCat for possible errors!",
                                Toast.LENGTH_LONG)
                                .show ();
                    }
                });
            }

            return null;
        }

    }

это полный файл некоторых важных файлов в моем проекте

MainActivity. java

package com.badjing.bloggercoba.activities;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.badjing.bloggercoba.R;
import com.badjing.bloggercoba.adapter.PostRecyclerViewAdapter;
import com.badjing.bloggercoba.config.Config;
import com.badjing.bloggercoba.handler.HttpHandler;
import com.badjing.bloggercoba.model.Posts;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private PostRecyclerViewAdapter postAdapter;
    private ArrayList<Posts> postsArrayList;
    private ProgressDialog pDialog;

    private Config config = new Config();
    String URL_FIX = Config.BLOG_URL + Config.BLOG_URL_MAX_RESULT + Config.MAX_RESULT + config.BLOG_URL_START_INDEX + config.START_INDEX + config.BLOG_URL_ALT_TYPE;;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        postsArrayList = new ArrayList<>();

        new getContent().execute();

        recyclerView = (RecyclerView) findViewById(R.id.post_recycle_view);
        postAdapter = new PostRecyclerViewAdapter(postsArrayList);

        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(MainActivity.this);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setAdapter(postAdapter);


    }

//    private void addData() {
//
//        postsArrayList = new ArrayList<>();
//        postsArrayList.add(new Posts("JUDUL", "SUMMARY"));
//
//    }

    private class getContent extends AsyncTask<Void, Void, Void> {

//        @Override
//        protected void onPreExecute() {
//            super.onPreExecute();
//            // Showing progress dialog
//            pDialog = new ProgressDialog(MainActivity.this);
//            pDialog.setMessage("Please wait...");
//            pDialog.setCancelable(false);
//            pDialog.show();
//        }

        @Override
        protected Void doInBackground(Void... voids) {
            HttpHandler sh = new HttpHandler();

            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(URL_FIX);

            if (jsonStr != null) {

                try{

                    JSONObject jsonObj = new JSONObject(jsonStr);

                    JSONObject feed = jsonObj.getJSONObject("feed");
                    JSONArray entry = feed.getJSONArray("entry");

                    Posts postsModel = new Posts();



                    for (int i = 0; i < entry.length(); i++) {

                        postsModel.setTitle(entry.getJSONObject(i).getJSONObject("title").getString("$t"));
                        postsModel.setSummary(entry.getJSONObject(i).getJSONObject("summary").getString("$t"));

                        postsArrayList.add(postsModel);

                    }

                } catch (final JSONException e) {
                    Log.e("RESPONSE", "Json parsing error: " + e.getMessage());
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "Json parsing error: " + e.getMessage(),
                                    Toast.LENGTH_LONG)
                                    .show();
                        }
                    });
                }

            } else {
                Log.e("RESPONSE", "Couldn't get json from server.");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "Couldn't get json from server. Check LogCat for possible errors!",
                                Toast.LENGTH_LONG)
                                .show();
                    }
                });
            }

            return null;
        }

    }

    private void urlBuilder() {
        URL_FIX = Config.BLOG_URL + Config.BLOG_URL_MAX_RESULT + 10 + config.BLOG_URL_START_INDEX + 1 + config.BLOG_URL_ALT_TYPE;
    }
}

Пост. java (пост модель)

package com.badjing.bloggercoba.model;

public class Posts {
    String title;
    String summary;

    public Posts() {
    }


    public Posts(String title, String summary) {
        this.title = title;
        this.summary = summary;
    }

    public String getTitle() {
        return title;
    }

    public String getSummary() {
        return summary;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setSummary(String summary) {
        this.summary = summary;
    }
}

PostRecyclerViewAdapter. java

package com.badjing.bloggercoba.adapter;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.badjing.bloggercoba.R;
import com.badjing.bloggercoba.model.Posts;

import java.util.ArrayList;

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

    private ArrayList<Posts> postsList;

    public PostRecyclerViewAdapter(ArrayList<Posts> postsArrayList) {
        this.postsList = postsArrayList;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        View view = layoutInflater.inflate(R.layout.post_row_item, parent, false);

        return new MyViewHolder(view);

    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.blog_post_title.setText(postsList.get(position).getTitle());
        holder.blog_post_sumary.setText(postsList.get(position).getSummary());
    }

    @Override
    public int getItemCount() {
        return (postsList!= null) ? postsList.size() : 0;
    }

    public static class MyViewHolder extends RecyclerView.ViewHolder {

        TextView blog_post_title, blog_post_sumary, blog_post_author;
        ImageView img_thumbnail;


        public MyViewHolder(View itemView) {
            super(itemView);

            blog_post_title     = itemView.findViewById(R.id.blog_post_title);
            blog_post_sumary    = itemView.findViewById(R.id.blog_post_sumary);
//            blog_post_author    = itemView.findViewById(R.id.blog_post_author);
//            img_thumbnail       = itemView.findViewById(R.id.post_thumbnail);

        }
    }

}

post_row_item. 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="250dp"
    android:layout_marginTop="5dp"
    android:padding="8dp"
    android:background="#fff">

    <ImageView
        android:id="@+id/post_thumbnail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/loading_shape"></ImageView>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="230dp"
        android:orientation="vertical"
        android:layout_margin="8dp" >

        <TextView
            android:id="@+id/blog_post_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="blog post title"
            android:textSize="20dp"
            android:textStyle="bold"/>

        <TextView
            android:id="@+id/blog_post_sumary"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="blog post summary"/>

        <TextView
            android:id="@+id/blog_post_author"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="~ author"/>

    </LinearLayout>

</LinearLayout>

спасибо за внимание и помощь.

...