दिलचस्प पोस्ट
IE11 दस्तावेज़ मोड डिफ़ॉल्ट रूप से आईई 7 रीसेट कैसे करें? ज़िप कैसे करता है (* * n) पायथन में काम करता है? सी # ऑडियो लाइब्रेरी जावा के लिए यूनिक्स सॉकेट कार्यान्वयन? गिट के लिए साइन ऑफ फीचर क्या है? एमएसआईएसडीएन: क्या यह सिम कार्ड डाटा है? क्यों MSISDN विश्वसनीय नहीं लाने के लिए सभी प्रदान की गई फ़ंक्शन (ब्लैकबेरी और एंड्रॉइड से)? क्या मैं गिट में फास्ट फ़ॉरवर्डिंग बंद कर सकता हूं? क्या पृष्ठभूमि में कोरबुलूटुट्रूट अनुप्रयोग क्या कर सकते हैं? परिणाम खाली होने पर LINQ वापस आती है स्थानीय होस्ट विंडोज पर मैं अपना पोर्ट 80 कैसे मुक्त कर सकता हूं? ईप्लीपस इंडिगो में मवेन / टॉमकेट प्रोजेक्ट्स / 3.7 PHP में डेटा को एन्क्रिप्ट / डिक्रिप्ट कैसे करें? दिनों में पीएचपी में दिनांक अंतर? जेएसएफ डेटाएबल कारणों में हाइबरनेट / जेपीए परिणाम दिखा रहा है: java.lang.NumberFormatException: इनपुट स्ट्रिंग के लिए: "" मैं FileList से एक फ़ाइल को कैसे निकालूं?

वॉली का उपयोग करके पोस्ट करें और PHP में प्राप्त करें

मैं अपने सभी HTTP अनुरोध को संभालने के लिए अपनी परियोजना में वॉली का उपयोग करने की कोशिश कर रहा हूं क्योंकि यह सबसे ज्यादा कुशल है जहां तक ​​मुझे पता है। इसलिए मैंने इस AndroidHive ट्यूटोरियल का पालन ​​करके वॉली सीखना शुरू कर दिया।

मेरा पहला GET अनुरोध सफल था। तो मैं पोस्ट अनुरोध पर चले गए और मैं विफल रहा। मैंने स्टैक ओवरफ्लो पर देखा था, कई लोगों को PHP के साथ वॉली के अनुरोध के बाद जोड़ना था। मेरा मानना ​​है कि हम इसे $_POST[""] सामान्य तरीके से उपयोग नहीं कर सकते क्योंकि वोली यूआरएल को जेएसएएन ऑब्जेक्ट भेजता है जो हम निर्दिष्ट करते हैं

बहुत सारे समाधान थे जो मैंने करने की कोशिश की लेकिन सफल नहीं हुए। मुझे लगता है कि PHP के साथ वॉली का उपयोग करने का एक सरल और मानक तरीका होना चाहिए। इसलिए मैं जानना चाहूंगा कि मुझे अपने PHP कोड में वॉली द्वारा भेजे गए जेएसएन ऑब्जेक्ट को प्राप्त करने के लिए क्या करना चाहिए।

और यह भी मैं कैसे जांचूं अगर वॉली वास्तव में एक JSON ऑब्जेक्ट भेज रहा है?

सरल पोस्ट अनुरोध भेजने के लिए मेरी वॉली कोड:

 JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST, url, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Log.d(TAG, response.toString()); pDialog.hide(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { VolleyLog.d(TAG, "Error: " + error.getMessage()); pDialog.hide(); } }) { @Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<String, String>(); params.put("name", "Droider"); return params; } }; // Adding request to request queue AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj); 

जेएसएन वस्तु प्राप्त करने के लिए मेरा PHP कोड: (मुझे पूरा यकीन है कि यह गलत तरीका है, मैं PHP में अच्छा नहीं हूं)

 <?php $jsonReceiveData = json_encode($_POST); echo $jsonReceivedData; ?> 

मैंने PHP में ऐसे JSON ऑब्जेक्ट को स्वीकार करने के बहुत सारे तरीकों की कोशिश की, जैसे कि एक ही फ़ाइल echo file_get_contents('php://input'); फ़ाइल echo file_get_contents('php://input');

परिणाम

 null 

संपादित करें (जॉर्जिया बेनेटोस के लिए सही तरीके से धन्यवाद)

मैंने क्लास बनाया है जैसा कि आपने क्लास नेम CustomRequest उल्लेख किया है, जो निम्नानुसार है:

 import java.io.UnsupportedEncodingException; import java.util.Map; import org.json.JSONException; import org.json.JSONObject; import com.android.volley.NetworkResponse; import com.android.volley.ParseError; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.Response.ErrorListener; import com.android.volley.Response.Listener; import com.android.volley.toolbox.HttpHeaderParser; public class CustomRequest extends Request<JSONObject>{ private Listener<JSONObject> listener; private Map<String, String> params; public CustomRequest(String url, Map<String, String> params, Listener<JSONObject> reponseListener, ErrorListener errorListener) { super(Method.GET, url, errorListener); this.listener = reponseListener; this.params = params; } public CustomRequest(int method, String url, Map<String, String> params, Listener<JSONObject> reponseListener, ErrorListener errorListener) { super(method, url, errorListener); this.listener = reponseListener; this.params = params; } @Override protected Map<String, String> getParams() throws com.android.volley.AuthFailureError { return params; }; @Override protected void deliverResponse(JSONObject response) { listener.onResponse(response); } @Override protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { try { String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); return Response.success(new JSONObject(jsonString), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (JSONException je) { return Response.error(new ParseError(je)); } } } 

अब मेरी गतिविधि में मैंने निम्नलिखित को बुलाया:

 String url = some valid url; Map<String, String> params = new HashMap<String, String>(); params.put("name", "Droider"); CustomRequest jsObjRequest = new CustomRequest(Method.POST, url, params, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { try { Log.d("Response: ", response.toString()); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError response) { Log.d("Response: ", response.toString()); } }); AppController.getInstance().addToRequestQueue(jsObjRequest); 

मेरा PHP कोड निम्नानुसार है:

 <?php $name = $_POST["name"]; $j = array('name' =>$name); echo json_encode($j); ?> 

अब इसकी सही मान वापस आ रही है:

 Droider 

वेब के समाधान से एकत्रित समाधान "वॉली का उपयोग करके पोस्ट करें और PHP में प्राप्त करें"

बहुत सारी समस्याएं हैं, यह कोशिश करो!

 public class CustomRequest extends Request<JSONObject> { private Listener<JSONObject> listener; private Map<String, String> params; public CustomRequest(String url,Map<String, String> params, Listener<JSONObject> responseListener, ErrorListener errorListener) { super(Method.GET, url, errorListener); this.listener = responseListener; this.params = params; } public CustomRequest(int method, String url,Map<String, String> params, Listener<JSONObject> reponseListener, ErrorListener errorListener) { super(method, url, errorListener); this.listener = reponseListener; this.params = params; } @Override protected Map<String, String> getParams() throws com.android.volley.AuthFailureError { return params; }; @Override protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { try { String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); return Response.success(new JSONObject(jsonString), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (JSONException je) { return Response.error(new ParseError(je)); } } @Override protected void deliverResponse(JSONObject response) { listener.onResponse(response); } 

पीएचपी

 $username = $_POST["username"]; $password = $_POST["password"]; echo json_encode($response); 

आपको एक नक्शा बनाना है, मानचित्र कुंजी-मूल्य प्रकार का समर्थन करता है, और आप वॉली के साथ पोस्ट करते हैं। पीएचपी में आपको $ variable = $ _POST ["key_from_map"] को $ चर में मान का पुनः प्राप्त करने के लिए मिलता है। फिर आप प्रतिक्रिया का निर्माण करते हैं और इसे json_encode कहते हैं

यहां एसक्यूएल को कैसे पूछे और जेएसओएन के रूप में जवाब वापस पोस्ट करने का एक PHP उदाहरण है

 $response["devices"] = array(); while ($row = mysqli_fetch_array($result)) { $device["id"] = $row["id"]; $device["type"] = $row["type"]; array_push($response["devices"], $device); } $response["success"] = true; echo json_encode($response); 

आप यहां देख सकते हैं कि प्रतिक्रिया प्रकार JSONObject है

 public CustomRequest(int method, String url,Map<String, String> params, Listener<JSONObject> reponseListener, ErrorListener errorListener) 

श्रोता के पैरामीटर को देखो!

 JSONObject params = new JSONObject(); try { params.put("name", "Droider"); } catch (JSONException e) { e.printStackTrace(); } JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST, url, params, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Log.d(TAG, response.toString()); pDialog.hide(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { VolleyLog.d(TAG, "Error: " + error.getMessage()); pDialog.hide(); } }) { @Override public Map<String, String> getHeaders() throws AuthFailureError { HashMap<String, String> headers = new HashMap<String, String>(); headers.put("Content-Type", "application/json; charset=utf-8"); return headers; } }; // Adding request to request queue AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj); 

और आपके सर्वर साइड में:

 <?php $value = json_decode(file_get_contents('php://input')); $file = 'MyName.txt'; file_put_contents($file, "The received name is {$value->name} ", FILE_APPEND | LOCK_EX); ?> 

MyName.txt खोलें और परिणाम देखें।

पोस्ट अनुरोध को php स्क्रिप्ट भेजने के लिए यहां एक सरल कोड है

MainActivity.java

 public class MainActivity extends AppCompatActivity implements View.OnClickListener { private static final String REGISTER_URL = "http://simplifiedcoding.16mb.com/UserRegistration/volleyRegister.php"; public static final String KEY_USERNAME = "username"; public static final String KEY_PASSWORD = "password"; public static final String KEY_EMAIL = "email"; private EditText editTextUsername; private EditText editTextEmail; private EditText editTextPassword; private Button buttonRegister; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editTextUsername = (EditText) findViewById(R.id.editTextUsername); editTextPassword = (EditText) findViewById(R.id.editTextPassword); editTextEmail= (EditText) findViewById(R.id.editTextEmail); buttonRegister = (Button) findViewById(R.id.buttonRegister); buttonRegister.setOnClickListener(this); } private void registerUser(){ final String username = editTextUsername.getText().toString().trim(); final String password = editTextPassword.getText().toString().trim(); final String email = editTextEmail.getText().toString().trim(); StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL, new Response.Listener<String>() { @Override public void onResponse(String response) { Toast.makeText(MainActivity.this,response,Toast.LENGTH_LONG).show(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_LONG).show(); } }){ @Override protected Map<String,String> getParams(){ Map<String,String> params = new HashMap<String, String>(); params.put(KEY_USERNAME,username); params.put(KEY_PASSWORD,password); params.put(KEY_EMAIL, email); return params; } }; RequestQueue requestQueue = Volley.newRequestQueue(this); requestQueue.add(stringRequest); } @Override public void onClick(View v) { if(v == buttonRegister){ registerUser(); } } } 

volleyRegister.php

 <?php if($_SERVER['REQUEST_METHOD']=='POST'){ $username = $_POST['username']; $email = $_POST['email']; $password = $_POST['password']; require_once('dbConnect.php'); $sql = "INSERT INTO volley (username,password,email) VALUES ('$username','$email','$password')"; if(mysqli_query($con,$sql)){ echo "Successfully Registered"; }else{ echo "Could not register"; } }else{ echo 'error'} } 

स्रोत: एंड्रॉइड वॉली पोस्ट अनुरोध ट्यूटोरियल

हमेशा स्ट्रिंग के साथ वॉली का उपयोग करें क्योंकि यह सर्वर से प्रतिक्रिया पाने के लिए सुरक्षित तरीका है, अगर JSON क्षतिग्रस्त हो या ठीक से फ़ॉर्मेट नहीं किया गया हो।

एंड्रॉइड कोड:

 StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() { @Override public void onResponse(String response) { try {JSONObject jsonObject = new JSONObject(response); } catch (JSONException ignored) { } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { if (volleyError instanceof TimeoutError) { } } }) { @Override public Map<String, String> getParams() throws AuthFailureError { HashMap<String, String> headers = new HashMap<>(); headers.put("name", "Droider"); return headers; } @Override public Priority getPriority() { return Priority.IMMEDIATE; } }; ApplicationController.getInstance().addToRequestQueue(stringRequest); 

PHP कोड:

 <?php $name = $_POST["name"]; $j = array('name' =>$name); echo json_encode($j); ?> 

यह मेरे लिए ठीक काम करता है अगर यह किसी को मदद करता है

 public class LoginActivity extends AppCompatActivity { private EditText Email; private EditText Password; private String URL = "http://REPLACE ME WITH YOUR URL/login.php"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); TextView register = (TextView) findViewById(R.id.Register); TextView forgotten = (TextView) findViewById(R.id.Forgotten); Button login = (Button) findViewById(R.id.Login); Email = (EditText) findViewById(R.id.Email); Password = (EditText) findViewById(R.id.Password); Password.setImeOptions(EditorInfo.IME_ACTION_DONE); login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { RequestQueue MyRequestQueue = Volley.newRequestQueue (LoginActivity.this); MyRequestQueue.add(MyStringRequest); } }); } StringRequest MyStringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() { @Override public void onResponse(String response) { Toast.makeText(getApplicationContext(),response.trim(), Toast.LENGTH_SHORT).show(); } }, new Response.ErrorListener() { //Create an error listener to handle errors appropriately. @Override public void onErrorResponse(VolleyError error) { Toast.makeText(getApplicationContext(),error.toString().trim(), Toast.LENGTH_LONG).show(); } }) { protected Map<String, String> getParams() { final String email = Email.getText().toString().trim(); final String password = Password.getText().toString().trim(); Map<String, String> MyData = new HashMap<String, String>(); MyData.put("email", email); MyData.put("password", password); return MyData; } }; } the login.php <?php $message = $_POST["email"]; echo $message; ?>