Skip to content Skip to sidebar Skip to footer

Android: Recycler View Adapter

I am new to recycler view widget , i want to get my data from my api url and list the data into my recycler view , i have these classes : recyclerAdapter , recyclerView , MainActiv

Solution 1:

Parsing Problem first I got.Change

 JSONArray array = jsonObject.getJSONArray("bedehkariHa");

To:

 JSONArray array = jsonObject.getJSONArray("bedehkari_ha");

Then check


Solution 2:

According to the result from JSON, the key bedehkariHa does not exist and that may cause Parsing Error, a JSONException. So instead of this:

 JSONArray array = jsonObject.getJSONArray("bedehkariHa");

use this to get the JSONArray associated with bedehkari_ha:

 JSONArray array = jsonObject.getJSONArray("bedehkari_ha");

Solution 3:

I'd firstly look at your general approach. You seem to be instantiating a Volley request...I bet this isn't the only one in your app?

Make a "NetworkService" singleton that holds application Context and call that as a service layer...rather than calling a new Volley instance for each class you need it!

Here is one I wrote for my apps...I have omitted a lot of the methods and left you with a GetRequest method. You could add the URLEncoding of parameters in the service.

You can call this by simply in an activity/fragment:

 HashMap<String,String> urlParams = new HashMap<>();
        urlParams.put("param1","value1");

        VolleyRequestService.getInstance(this).getJSONObject(urlParams, true, new GetJSONObjectRequestable() {
            @Override
            public void onSuccessfulAPIResponse(JSONObject response) {

            }

            @Override
            public void onFailedAPIResponse(VolleyRequestService.ErrorType errorType, String description) {

            }
        },"https://myendpoint.com/endpoint.php");

And the service:

package devdroidjonno.com.tests.Networking;

import android.content.Context;
import android.util.Log;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

import java.util.HashMap;
import java.util.Map;

public class VolleyRequestService {
    private static final String DEBUG = "VolleyRequestService";
    private static final String authCode = "87fe987vwefb987eb9w87wv";
    private static VolleyRequestService ourInstance = null;
    private static RequestQueue requestQueue;

    private VolleyRequestService(Context applicationContext) {
        this.requestQueue = Volley.newRequestQueue(applicationContext);
        Log.d(DEBUG, "Init Volley Service " + this.hashCode());
    }

    public static VolleyRequestService getInstance(Context context) {
        if (ourInstance == null) {
            ourInstance = new VolleyRequestService(context.getApplicationContext());
        }
        return ourInstance;
    }

    // A GET request to an endpoint that returns a JSONObject. 
    public void getJSONObject(HashMap<String, String> urlParams, final boolean requiresAuthHeader, final GetJSONObjectRequestable callback, String endpointURL) {
        endpointURL += "?";
        for (Map.Entry mapEntry : urlParams.entrySet()) {
            endpointURL += mapEntry.getKey() + "=" + mapEntry.getValue() + "&";
        }
        Log.d(DEBUG, endpointURL);
        requestQueue.add(new JsonObjectRequest(Request.Method.GET, endpointURL, null, response -> {
            Log.d(DEBUG, response.toString());
            try {
                if (response.has("error")) {
                    callback.onFailedAPIResponse(ErrorType.APIERROR, response.getString("error"));
                } else {
                    callback.onSuccessfulAPIResponse(response);
                }
            } catch (Exception e) {
                callback.onFailedAPIResponse(ErrorType.EXCEPTION, e.getLocalizedMessage());
                e.printStackTrace();
            }
        }, error -> callback.onFailedAPIResponse(ErrorType.VOLLEYERROR, error.getMessage())) {
            @Override
            public Map<String, String> getHeaders() {
                HashMap<String, String> headers = new HashMap<>();
                if (requiresAuthHeader) headers.put("Authorization", authCode);
                return headers;
            }
        });
    }

    public enum ErrorType {
        NOERROR, APIERROR, VOLLEYERROR, AUTHERROR, EXCEPTION
    }

}

And finally the callback...

package devdroidjonno.com.tests.Networking;

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

import java.io.IOException;


public interface GetJSONObjectRequestable {
    void onSuccessfulAPIResponse(JSONObject response) throws JSONException, IOException;

    void onFailedAPIResponse(VolleyRequestService.ErrorType errorType, String description);
}

Post a Comment for "Android: Recycler View Adapter"