user3225075
user3225075

Reputation: 373

Volley - Make a jsonarray post request

I am having this class where am fetching json array with POST method after referring several google searches and stackoverflow question but my code gives an weird error Cannot Resolve Symbol POST

here is my activity

public class fbuk extends Activity {

    // Movies json url
    private static final String url = "http://example.com/xyz.php";
    private ProgressDialog pDialog;
    private List<Movie> movieList = new ArrayList<Movie>();
    private ListView listView;
    private CustomListAdapter adapter;

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

        listView = (ListView) findViewById(R.id.listview);
        adapter = new CustomListAdapter(this, movieList);
        listView.setAdapter(adapter);

        pDialog = new ProgressDialog(this);
        // Showing progress dialog before making http request
        pDialog.setMessage("Loading...");
        pDialog.show();

        // changing action bar color

        // Creating volley request obj
        JsonArrayRequest movieReq = new PostJsonArrayRequest(Method.POST, url, null, 
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());
                    hidePDialog();

                    // Parsing json
                    for (int i = 0; i < response.length(); i++) {
                        try {

                            JSONObject obj = response.getJSONObject(i);
                            Movie movie = new Movie();
                            movie.setTitle(obj.getString("ttl"));
                            movie.setThumbnailUrl(obj.getString("img"));
                            movie.setRating(obj.getString("stts"));
                            movie.setYear(obj.getString("rel"));

                            movieList.add(movie);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }

                    // notifying list adapter about data changes
                    // so that it renders the list view with updated data
                    adapter.notifyDataSetChanged();
                }
            }, 
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());
                    hidePDialog();
                }
            });

        // Adding request to request queue
        AppController.getInstance().addToRequestQueue(movieReq);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        hidePDialog();
    }

    private void hidePDialog() {
        if (pDialog != null) {
            pDialog.dismiss();
            pDialog = null;
        }
    }
}


public class PostJsonArrayRequest extends JsonRequest<JSONArray> {

    /**
     * Creates a new request.
     * @param url URL to fetch the JSON from
     * @param listener Listener to receive the JSON response
     * @param errorListener Error listener, or null to ignore errors.
     */
    public PostJsonArrayRequest(String url, Response.Listener<JSONArray> listener, Response.ErrorListener errorListener) {
        super(Method.POST, url, null, listener, errorListener);
    }

    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        HashMap<String, String> params = new HashMap<String, String>();
        params.put("q", "ram");
        return params;
    }

    @Override
    protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) {
        try {
            String jsonString =
                    new String(response.data,   HttpHeaderParser.parseCharset(response.headers));
            return Response.success(new JSONArray(jsonString),
                    HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            return Response.error(new ParseError(e));
        } catch (JSONException je) {
            return Response.error(new ParseError(je));
        }
    }
}

I am following a tutorial from androidhive

Please suggest where am making the mistake

Upvotes: 1

Views: 2283

Answers (3)

kashif181
kashif181

Reputation: 315

I have done like this (see sample code), make sure that import com.android.volley.Request; must be imported in your activity class otherwise Request.Method.POST will not work and Unable to Resolve will appear

String url = "http://example.com/xyz.php";

    ErrorListener errorListener = new ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError errorResponce) 
        {

        }
    };

    Listener<JSONArray > jsonArrayListener = new Listener<JSONArray>() 
    {
        @Override
        public void onResponse(JSONArray response) {
            // TODO Auto-generated method stub

        }
    };


    PostJsonArrayRequest req = new PostJsonArrayRequest(Request.Method.POST, url , null, jsonArrayListener, errorListener);

And use this class for

 public class PostJsonArrayRequest extends JsonRequest<JSONArray> 
{

    public PostJsonArrayRequest(int method, String url, String requestBody,
            Listener<JSONArray> listener, ErrorListener errorListener) 
    {
        super(method, url, requestBody, listener, errorListener);
    }

    @Override
    protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) 
    {
        try {
            String jsonString =
                    new String(response.data,   HttpHeaderParser.parseCharset(response.headers));
            return Response.success(new JSONArray(jsonString),
                    HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            return Response.error(new ParseError(e));
        } catch (JSONException je) {
            return Response.error(new ParseError(je));
        }
    }

}

Upvotes: 1

sandeep gupta
sandeep gupta

Reputation: 301

Use

JsonArrayRequest movieReq = new PostJsonArrayRequest(Request.Method.POST,url,
        new Response.Listener<JSONArray>() {

and make sure to import,

import com.android.volley.Request.Method;

hope it will work.

Upvotes: 0

Piyush
Piyush

Reputation: 18933

Check your import for Method. It should be

import com.android.volley.Request.Method

May be you have imported as a

import java.lang.reflect.Method;

Upvotes: 0

Related Questions