0

I want develop android application for one website. I read website posts from json and show its in RecyclerView every 10 posts.
I write this codes, but when running application show me FC error!

Json Link : Json Link

MainActivity codes:

public class Main_page extends AppCompatActivity {

    private static final long RIPPLE_DURATION = 250;
    private Toolbar toolbar;
    private RelativeLayout root;
    private ImageView menu_image;
    private RecyclerView main_recyclerView;
    private MainAdapter2 mAdaper;
    private List<MainDataModel> dataModels = new ArrayList<MainDataModel>();
    private List<MainDataModel> dataModelsArray;
    private Context context;
    protected Handler handler;
    private RelativeLayout loadLayout;
    private LinearLayoutManager mLayoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_page);
        if (!EventBus.getDefault().isRegistered(this)) {
            EventBus.getDefault().register(this);
        }
        handler = new Handler();
        context = getApplicationContext();
        loadLayout = (RelativeLayout) findViewById(R.id.main_empty_layout);
        toolbar = (Toolbar) findViewById(R.id.main_toolbar);
        if (toolbar != null) {
            setSupportActionBar(toolbar);
            getSupportActionBar().setTitle(null);
        }
        LoadData();
        mLayoutManager = new LinearLayoutManager(this);
        // Menu
        root = (RelativeLayout) findViewById(R.id.main_root);
        View guillotineMenu = LayoutInflater.from(this).inflate(R.layout.menu_layout, null);
        root.addView(guillotineMenu);
        menu_image = (ImageView) toolbar.findViewById(R.id.toolbar_logo);
        new GuillotineAnimation.GuillotineBuilder(guillotineMenu, guillotineMenu.findViewById(R.id.menu_layout_image), menu_image)
                .setStartDelay(RIPPLE_DURATION)
                .setActionBarViewForAnimation(toolbar)
                .setClosedOnStart(true)
                .build();
        // RecyclerView and setData
        main_recyclerView = (RecyclerView) findViewById(R.id.main_recycler);
        main_recyclerView.setHasFixedSize(true);
        main_recyclerView.setLayoutManager(mLayoutManager);

        mAdaper = new MainAdapter2(this, main_recyclerView, dataModels);
        main_recyclerView.setAdapter(mAdaper);


    }


    @Subscribe
    public void onEvent(List<MainDataModel> mainInfoModels) {
        mAdaper.add(mainInfoModels);

        if (dataModels.isEmpty()) {
            main_recyclerView.setVisibility(View.GONE);
            loadLayout.setVisibility(View.VISIBLE);

        } else {
            main_recyclerView.setVisibility(View.VISIBLE);
            loadLayout.setVisibility(View.GONE);
        }
    }

    private void LoadData() {
        final MainDataInfo dataInfo = new MainDataInfo();
        dataInfo.getMainDataInfo(this);
    }

AsyncTask codes:

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();

            Request request = new Request.Builder()
                    .url(ServerAddress + "page=1")
                    .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 <= postsArray.length(); i++) {
                            JSONObject postObject = postsArray.optJSONObject(i);

                            MainDataModel model = new MainDataModel();
                            model.setId(postObject.optInt("id"));
                            model.setTitle(postObject.optString("title"));
                            model.setContent(postObject.optString("content"));
                            //get other data
                            JSONObject imageObj = postObject.getJSONObject("thumbnail_images");
                            JSONObject mediumObj = imageObj.optJSONObject("medium");
                            String mediumImage = mediumObj.getString("url");

                            model.setThumbnail(mediumObj.optString("url"));
                            //get other data 2
                            JSONObject images=postObject.getJSONObject("thumbnail_images");
                            JSONObject imagesPair=images.getJSONObject("medium");
                            //item.setThumbnail(imagesPair.optString("url"));

                            infoModels.add(model);

                        }
                    } 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);
            }
        }
    }
}

DataProvider codes:

public class MainDataModel implements Serializable{

    private static final long serialVersionUID = 1L;


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

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

    private int id;
    private String title;

    public String getThumbnail() {
        return thumbnail;
    }

    public void setThumbnail(String thumbnail) {
        this.thumbnail = thumbnail;
    }

    private String thumbnail;

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    private String content;
}

LogCat error :

04-26 16:31:14.425 16710-16813/com.tellfa.colony E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.tellfa.colony, PID: 16710
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int org.json.JSONObject.optInt(java.lang.String)' on a null object reference
at com.tellfa.colony.DataAccessLayer.MainDataInfo$getInfo.doInBackground(MainDataInfo.java:69)
at com.tellfa.colony.DataAccessLayer.MainDataInfo$getInfo.doInBackground(MainDataInfo.java:35)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
at java.lang.Thread.run(Thread.java:818) 
04-26 16:31:15.514 16710-16710/com.tellfa.colony E/WindowManager: android.view.WindowLeaked: Activity com.tellfa.colony.Activities.Main_page has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{2382acc8 V.E..... R......D 0,0-1080,1920} that was originally added here
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:376)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:261)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:306)
at com.tellfa.colony.Components.CustomProcessDialog.createAndShow(CustomProcessDialog.java:21)
 at com.tellfa.colony.DataAccessLayer.MainDataInfo$getInfo.onPreExecute(MainDataInfo.java:42)
 at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
 at android.os.AsyncTask.execute(AsyncTask.java:535)
 at com.tellfa.colony.DataAccessLayer.MainDataInfo.getMainDataInfo(MainDataInfo.java:32)
 at com.tellfa.colony.Activities.Main_page.LoadData(Main_page.java:122)
 at com.tellfa.colony.Activities.Main_page.onCreate(Main_page.java:69)
 at android.app.Activity.performCreate(Activity.java:6020)
 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2284)
 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2391)
 at android.app.ActivityThread.access$800(ActivityThread.java:151)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)
 at android.os.Handler.dispatchMessage(Handler.java:102)
 at android.os.Looper.loop(Looper.java:135)
 at android.app.ActivityThread.main(ActivityThread.java:5349)
 at java.lang.reflect.Method.invoke(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:372)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)

How can i fix it? thanks all <3

USER9561
  • 1,084
  • 3
  • 15
  • 41
F_Feed
  • 125
  • 1
  • 1
  • 8

0 Answers0