POST mit Android Retrofit

Ich bin neu in der Android-Programmierung und arbeite mit Retrofit. Ich habe zu diesem Thema eine Reihe von Nachforschungen angestellt, konnte jedoch keine auf meine Bedürfnisse zugeschnittene Lösung finden. Ich arbeite mit unserer API und versuche, eine POST-Anfrage zu stellen. Ich habe dies erfolgreich mit folgendem nicht nachrüstbaren Code erreicht:

    private class ProcessLogin extends AsyncTask<Void, String, JSONObject> {
    private ProgressDialog pDialog;
    String email,password;

    protected void onPreExecute() {
        super.onPreExecute();
        inputEmail = (EditText) findViewById(R.id.email);
        inputPassword = (EditText) findViewById(R.id.password);
        email = inputEmail.getText().toString();
        password = inputPassword.getText().toString();
        pDialog = new ProgressDialog(LoginActivity.this);
        pDialog.setTitle("Contacting Servers");
        pDialog.setMessage("Logging in ...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    protected JSONObject doInBackground(Void... params) {
        HttpURLConnection connection;
        OutputStreamWriter request = null;
        URL url = null;   
        String response = null;         
        String parameters = "username="+email+"&password="+password;  
        try
        {
            url = new URL("http://.../api/login");
            connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            connection.setRequestMethod("POST");    

            request = new OutputStreamWriter(connection.getOutputStream());
            request.write(parameters);
            request.flush();
            request.close();            
            String line = "";               
            InputStreamReader isr = new InputStreamReader(connection.getInputStream());
            BufferedReader reader = new BufferedReader(isr);
            StringBuilder sb = new StringBuilder();
            while ((line = reader.readLine()) != null)
            {
                sb.append(line + "\n");
            }
            // Response from server after login process will be stored in response variable.                
            response = sb.toString();
            // You can perform UI operations here
            isr.close();
            reader.close();
        }
        catch(IOException e)
        {
            // Error
        }
        System.out.println(response);
        JSONObject jObj = null;        
        // Try to parse the string to a JSON Object
        try {
            jObj = new JSONObject(response);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // Return the JSONObject
        return jObj;
    }

    protected void onPostExecute(JSONObject json) {
        String status = (String) json.optJSONArray("users").optJSONObject(0).optJSONObject("user").optString("login");
        pDialog.dismiss();
        if (status.equals("Failed")) {
            loginMessage.setText("Login Failed");   
        }
        else if (status.equals("Success")) {
            loginMessage.setText("Success!");   
            startActivity(new Intent(getApplicationContext(), DActivity.class));
        }

    }
}

Ich versuche jetzt, mit Retrofit die gleichen Ergebnisse zu erzielen, bin mir jedoch nicht sicher, wie ich den JSON-Code mithilfe von Rückrufen von unserer API zurückholen kann (ich gehe davon aus, dass dieser Aufruf asynchron erfolgen sollte?):

Ich habe eine Schnittstelle mit der folgenden Methode erstellt:

    @FormUrlEncoded
@POST("/login")
public void login(@Field("username") String username, @Field("password") String password, Callback<JSONObject> callback);

Und instanziierte den RestAdapter usw. in der onCreate-Methode meiner Aktivität. Wenn der Benutzer auf die Schaltfläche "Anmelden" drückt (nachdem er seinen Benutzernamen und sein Kennwort eingegeben hat), wird in der onClick-Methode der Schaltfläche Folgendes aufgerufen:

    service.login(email, password, new Callback<JSONObject>() { 
            @Override
            public void failure(final RetrofitError error) {
                android.util.Log.i("example", "Error, body: " + error.getBody().toString());
            }
            @Override
            public void success(JSONObject arg0, Response arg1) {

            }
        }
        );

Dies funktioniert jedoch nicht wie beabsichtigt und ich glaube wirklich nicht, dass ich mich dem richtig nähere. Ich möchte einen POST an unseren Server senden können, der einen Block mit JSON-formatierten Daten über diesen Benutzer zurücksendet. Wenn jemand mich in die richtige Richtung weisen könnte, wäre das sehr dankbar. Danke im Voraus

Antworten auf die Frage(2)

Ihre Antwort auf die Frage