2015-05-05 98 views
3

我想發送一些數據到使用Volley庫的服務器。發送帖子數據到服務器使用Volley android

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

不幸的是沒有發送json,我什麼也沒有回來。這裏是我的logcat輸出的一個示例。在成功發送請求到服務器之後,我想獲得成功/失敗的響應。

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) 

請幫忙嗎?感謝名單。

+0

在哪種格式要發送參數,即JSON或字符串 –

回答

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

使用這樣的排氣,...它爲我工作。

+0

他沒有使用JsonObjectRequest,但是StringRequest – inmyth

+0

如果我想發送一個字符串參數和一個int,該怎麼辦? –

+0

final HashMap postParams = new HashMap (); ...使用這個...它將適用於所有組合 – Android

0

首先你不是發送json到你的服務器。你使用post方法發送參數化url並獲取json文本作爲響應。

我認爲問題是來自服務器的響應,據說是json。但是從您的日誌中,您從Log.d(TAG, "Register Response: " + response.toString());獲得的文本"---- YOUR DATA ----"完全不是json格式。所以你需要修改你的服務器以正確的json格式進行響應。

+0

我認爲Volley庫在使用HashMap中的參數添加後爲您執行Json解析。 – Theo

+0

好的。這是我的邏輯。我將Java對象(電子郵件等)序列化爲json字符串。應該將這些字符串輸入到服務器中,並獲得相應的響應,如註冊成功等等。 – Theo

+0

不可以。您的服務器請求與json無關。它只是將參數及其值映射到鍵值對中。如果你看看你的日誌,這行'username = xxx&email = xxx%40gmail.com&password = xxxx'顯示你的請求的樣子。但是,您可以將服務器設置爲發送json作爲Volley可以使用其內置方法處理的響應。 – inmyth

0

這是解決方案。我不得不使用JsonObjectRequest類而不是StringRequest。 JsonRequest所做的是將HashMap鍵值對轉換爲JSON格式。

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



    } 
0

JSON後

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

[ 「深」, 「[email protected]」, 「8888999999」]]

+1

不提供代碼解答。請編輯您的答案並解釋您的解決方案。 –

相關問題