the_title Senden Sie eine Postanfrage mit Volley und erhalten Sie in PHP



wordpress title php code (4)

Hier ist ein einfacher Code, um Post-Anfrage an PHP-Skript zu senden

Hauptaktivität.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'}
}

Quelle: Android Volley Post Anfrage Tutorial

Ich versuche, Volley in meinem Projekt zu verwenden, um alle meine HTTP-Anfrage zu behandeln, da es soweit ich weiß, das effizienteste ist. Also habe ich angefangen, Volley zu lernen, indem ich dieses AndroidHive-Tutorial befolge .

Meine erste GET-Anfrage war erfolgreich. Dann ging ich zur POST-Anfrage und ich scheiterte. Ich habe auf Stack Overflow gesehen, dass viele Leute Probleme hatten, Post-Anfrage von Volley mit PHP zu kombinieren. Ich glaube, wir können nicht auf den normalen Weg zugreifen, der $_POST[""] da Volley ein JSON-Objekt an die von uns angegebene URL sendet.

Es gab viele Lösungen, die ich versuchte, aber nicht erfolgreich war. Ich denke, es sollte eine einfache und standardmäßige Art der Verwendung von Volley mit PHP geben. Also würde ich gerne wissen, was ich tun muss, um das von mir in meinem PHP-Code gesendete JSON-Objekt zu erhalten.

Und wie überprüfe ich, ob Volley wirklich ein JSON-Objekt sendet?

Mein Volley-Code zum Senden einer einfachen Postanfrage:

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

Mein PHP Code um json object zu erhalten: (Ich bin mir ziemlich sicher das ist der falsche Weg, ich bin nicht so gut in PHP)

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

Ich habe viele Möglichkeiten ausprobiert, JSON-Objekte in PHP zu akzeptieren. echo file_get_contents('php://input');

Das Ergebnis

null

EDIT (Der richtige Weg dank Georgian Benetatos)

Ich habe die Klasse erstellt, wie Sie erwähnt haben, der Klassenname ist CustomRequest der wie folgt lautet:

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

}

Jetzt in meiner Tätigkeit habe ich folgendes genannt:

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

Mein PHP-Code ist wie folgt:

<?php
$name = $_POST["name"];

$j = array('name' =>$name);
echo json_encode($j);
?>

Jetzt gibt es den richtigen Wert zurück:

Droider

Answer #1
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);

und auf deiner Serverseite:

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

öffne MyName.txt und sehe das Ergebnis.


Answer #2

Ich hatte selbst viele Probleme, probier das aus!

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

PHP

$username = $_POST["username"];
$password = $_POST["password"];

echo json_encode($response);

Sie müssen eine Karte erstellen, die Karte unterstützt den Schlüsselwerttyp und dann posten Sie mit Volley. In PHP erhalten Sie $ variable = $ _POST ["key_from_map"], um den Wert in der Variablen $ zu retreive. Dann bauen Sie die Antwort auf und json_encode es.

Hier ist ein PHP-Beispiel, wie man sql abfragt und die Antwort als JSON zurückgibt

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

Sie können hier sehen, dass der Antworttyp JSONObject ist

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

Schau dir den Parameter des Zuhörers an!


Answer #3

Das funktioniert gut für mich, wenn das irgendjemandem hilft

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




android-volley