4

I am trying to send some data to the server using the Volley library.

 private void registerUser(final String email, final String username, final String password) { // Tag used to cancel the request String tag_string_req = "req_register"; pDialog.setMessage("Registering ..."); StringRequest strReq = new StringRequest(Method.POST, AppConfig.URL_REGISTER, new Response.Listener<String>() { @Override public void onResponse(String response) { Log.d(TAG, "Register Response: " + response.toString()); try { JSONObject jObj = new JSONObject(response); // String status = jObj.getString("status"); // User successfully stored in MySQL // Now store the user in sqlite String name = jObj.getString("username"); String email = jObj.getString("email"); String password = jObj.getString("password"); // String created_at = user //.getString("created_at"); // Inserting row in users table // db.addUser(name, email); // Launch login activity Intent intent = new Intent( RegisterActivity.this, LoginActivity.class); startActivity(intent); finish(); } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e(TAG, "Registration Error: " + error.getMessage()); Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show(); } }) { @Override protected Map<String, String> getParams() { // Posting params to register url Map<String, String> params = new HashMap<String, String>(); params.put("email", email); params.put("username", username); params.put("password", password); return params; } 

Unfortunately no json is sent and I get nothing back. Here is a sample of my logcat output. After sending a request successfully to the server, I want to get response with success/fail.

Register Response: ---- YOUR DATA ---- username=xxx&email=xxx%40gmail.com&password=xxxx&------------------- 05-05 14:56:55.002 2558-2558/app.victory.walking.thewalkingviktory W/System.err﹕ org.json.JSONException: Value ---- of type java.lang.String cannot be converted to JSONObject 05-05 14:56:55.002 2558-2558/app.victory.walking.thewalkingviktory W/System.err﹕ at org.json.JSON.typeMismatch(JSON.java:111) 05-05 14:56:55.002 2558-2558/app.victory.walking.thewalkingviktory W/System.err﹕ at org.json.JSONObject.<init>(JSONObject.java:160) 05-05 14:56:55.002 2558-2558/app.victory.walking.thewalkingviktory W/System.err﹕ at org.json.JSONObject.<init>(JSONObject.java:173) 

Any help please? Thanx.

1
  • In which format you want to send parameters i.e JSON or String Commented May 22, 2015 at 19:44

5 Answers 5

6
 private void postUsingVolley() { String tag_json_obj = "json_obj_req"; final ProgressDialog pDialog = new ProgressDialog(this); pDialog.setMessage("posting..."); pDialog.show(); final String mVendorId = DeviceDetails.getInstance(mContext).getVendor_id(); String mUserId = UserModel.getInstance(mContext).getUser_id(); final HashMap<String, String> postParams = new HashMap<String, String>(); sendFeedbackParams.put("key1", value1); sendFeedbackParams.put("key2", value2); sendFeedbackParams.put("key3", value3); JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, ApplicationData.POST_URL, new JSONObject(postParams), new com.android.volley.Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { //Log.d("TAG", response.toString()); try { //Toast.makeText(mContext, response.getString("message"), Toast.LENGTH_LONG).show(); Toast.makeText(mContext, "Thank you for your post", Toast.LENGTH_LONG).show(); if (response.getBoolean("status")) { pDialog.dismiss(); finish(); } } catch (JSONException e) { Log.e("TAG", e.toString()); } pDialog.dismiss(); } }, new com.android.volley.Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { //VolleyLog.d("TAG", "Error: " + error.getMessage()); pDialog.dismiss(); if (isNetworkProblem(error)) { Toast.makeText(mContext, "Internet Problem", Toast.LENGTH_SHORT).show(); } } }) { @Override public String getBodyContentType() { return "application/json; charset=utf-8"; } @Override public Map<String, String> getHeaders() throws AuthFailureError { return getRequestHeaders(); } }; jsonObjReq.setRetryPolicy(new DefaultRetryPolicy(8000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); // Adding request to request queue AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj); } 

Use Volley like this,... It is working for me.

Sign up to request clarification or add additional context in comments.

4 Comments

He's not using JsonObjectRequest but StringRequest
what if i want to send one string parameter and one int?
final HashMap<Object, Object> postParams = new HashMap<Object, StriObjectng>(); ... Use this... it will work for all combinations
is not need to set body type ? @Override public String getBodyContentType() { return "application/json; charset=utf-8"; }
1

First of all you are not sending json to your server. You are sending parametrized url with post method and getting json text as response.

I think the problem is the response from the server which is supposedly json. But from your log, this text "---- YOUR DATA ----" which you get from Log.d(TAG, "Register Response: " + response.toString()); is not at all json formatted . So you need to modify your server to respond in correct json format.

5 Comments

I thought Volley library does the Json parsing for you after using the adding the parameters in the HashMap.
Ok. This is my logic. I serialize the java objects(email etc) to json strings.Those strings should be entered in the server,and get the corresponding response right like registration successful and so right?
No. Your request to server has nothing to do with json. It simply maps parameters and their values into key-value pairs. If you look at your log, this line username=xxx&email=xxx%40gmail.com&password=xxxx shows how your request looks like. You can however set the server to send json as response which Volley can process with its built-in methods.
So you are suggesting it is a server problem. I am saying this as I didn't do any of server coding,but another guy at work.
I can say that the response is not json formatted. I do not know if the request is successfully processed by the server or that the response you get corresponds to success or failure.
0

This is the solution. I had to use the JsonObjectRequest class and not the StringRequest on. What JsonRequest does is that it converts your HashMap key-value pairs into a JSON Format.

 private void registerUser(String email_address,String username, String password) { String tag_json_obj = "json_obj_req"; final ProgressDialog pDialog = new ProgressDialog(this); pDialog.setMessage("posting..."); pDialog.show(); final String mVendorId = DeviceDetails.getInstance(mContext).getVendor_id(); String mUserId = UserModel.getInstance(mContext).getUser_id(); String location = getResources().getConfiguration().locale.getCountry(); final HashMap<String, String> postParams = new HashMap<String, String> (); postParams.put("username", username); postParams.put("email", email_address); postParams.put("password", password); postParams.put("location", location); Response.Listener<JSONObject> listener; Response.ErrorListener errorListener; final JSONObject jsonObject = new JSONObject(postParams); JsonObjectRequest jsonObjReq = new JsonObjectRequest(AppConfig.URL_REGISTER, jsonObject, new com.android.volley.Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { //Log.d("TAG", response.toString()); try { Toast.makeText(getApplicationContext(), response.getString("message"), Toast.LENGTH_LONG).show(); // Toast.makeText(getApplicationContext(), "Thank you for your post", Toast.LENGTH_LONG).show(); if (response.getString("status").equals("success")){ session.setLogin(true); pDialog.dismiss(); Intent i = new Intent(RegisterActivity.this,Welcome.class); startActivity(i); finish(); } } catch (JSONException e) { Log.e("TAG", e.toString()); } pDialog.dismiss(); } }, new com.android.volley.Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { //VolleyLog.d("TAG", "Error: " + error.getMessage()); pDialog.dismiss(); } }) { @Override public String getBodyContentType() { return "application/json; charset=utf-8"; } }; // Adding request to request queue AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj); } 

Comments

0

JSon post

public void makePostUsingVolley() { session = new SessionManager(getActivity().getApplicationContext()); session.checkLogin(); HashMap<String, String> user = session.getUserDetails(); final String token = user.get(SessionManager.KEY_NAME); //Toast.makeText(getActivity().getApplicationContext(),name, Toast.LENGTH_SHORT).show(); final Map<String, String> params = new HashMap<String, String>(); //params.put("Employees",name); String tag_json_obj = "json_obj_req"; String url = "enter your url"; final ProgressDialog pDialog = new ProgressDialog(getApplicationContext()); pDialog.setMessage("Loading..."); pDialog.show(); StringRequest req = new StringRequest(Request.Method.GET,url, new Response.Listener<String>() { // final JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET, //"http://emservices.azurewebsites.net/Employee.asmx/CheckUserGet", new Response.Listener<JSONObject>() { @Override public void onResponse(String response) { JSONObject json; // Toast.makeText(getActivity().getApplicationContext(),"dfgghfhfgjhgjghjuhj", Toast.LENGTH_SHORT).show(); //Toast.makeText(getActivity().getApplicationContext(),obb.length(), Toast.LENGTH_SHORT).show(); // JSONObject data=obj.getJSONObject("Employee_Name"); ObjectOutput out = null; try { json = new JSONObject(response); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } pDialog.hide(); // Toast.makeText(getApplicationContext(),"hi", Toast.LENGTH_SHORT).show(); Log.d("", response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { VolleyLog.d("", "Error: " + error.getMessage()); Toast.makeText(getActivity().getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show(); pDialog.hide(); // hide the progress dialog } }) { @Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<String, String>(); params.put("username",name); params.put("password",password); return params; } }; // Adding request to request queue AppController.getInstance().addToRequestQueue(req, tag_json_obj); } 

Comments

-1
requestQueue= Volley.newRequestQueue(MainActivity.this); StringRequest request=new StringRequest(Request.Method.PUT, url, new Response.Listener<String>() { @Override public void onResponse(String response) { Toast.makeText(MainActivity.this, ""+response, Toast.LENGTH_SHORT).show(); Log.d("response",response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }){ @Override protected Map<String, String> getParams() throws AuthFailureError { JSONObject jsonObject = new JSONObject(); try { jsonObject.put("name", name.getText().toString().trim()); jsonObject.put("email", email.getText().toString().trim()); jsonObject.put("phone", phone.getText().toString().trim()); } catch (JSONException e) { e.printStackTrace(); } Map<String, String> params = new HashMap<String, String>(); params.put("message", jsonObject.toString()); return params; } }; requestQueue.add(request); 

[["deep","[email protected]","8888999999"]]

1 Comment

Code-only answers are discouraged. Please edit your answer and explain your solution.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.