注册页面数据存储但未收到JSON编码

时间:2016-08-30 14:18:11

标签: mysql json encode

我确定这只是一个小问题,但我无法弄清楚我需要改变什么:我的应用程序中有一个注册页面。当用户插入数据时,数据将传递给php脚本并存储在MYSQL数据库中。连接工作正常,因为我在数据库中获得了一个新用户,但是json $ success不起作用 - 如果用户可以注册,我想制作一个Toast并更改为一个新活动,但是当我点击它时它什么都不做按钮。

这是我的Java代码:

package com.example.android.festivalapp;

import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class JetztRegistrieren extends Startseite {

    Button bRegistrierungAbschliessen;
    EditText etUserName, etUserMail, etUserPasswort, etUserPasswort2, etGeburtsdatum, etTelefonnummer;
    RadioButton rbMaennlich, rbWeiblich;
    RadioGroup rgGeschlecht;
    protected String enteredname, enteredemail, enteredpassword, enteredpassword2, enteredGeb, enteredTelnr, userGender;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.jetzt_registrieren);

        bRegistrierungAbschliessen = (Button) findViewById(R.id.bRegistrierungAbschliessen);

        etUserName = (EditText) findViewById(R.id.etUserName);
        etUserMail = (EditText) findViewById(R.id.etUserMail);
        etUserPasswort = (EditText) findViewById(R.id.etUserPasswort);
        etUserPasswort2 = (EditText) findViewById(R.id.etUserPasswort2);
        etGeburtsdatum = (EditText) findViewById(R.id.etGeburtsdatum);
        etTelefonnummer = (EditText) findViewById(R.id.etTelefonnummer);
        rgGeschlecht = (RadioGroup) findViewById(R.id.rgGeschlecht);
        rbMaennlich = (RadioButton) findViewById(R.id.rbMaennlich);
        rbWeiblich = (RadioButton) findViewById(R.id.rbWeiblich);

        bRegistrierungAbschliessen.setOnClickListener(new View.OnClickListener() {
            //testen, ob Mail und Passwort ausgefüllt oder lang genug
            @Override
            public void onClick(View v) {

                enteredname = etUserName.getText().toString();
                enteredemail = etUserMail.getText().toString();
                enteredpassword = etUserPasswort.getText().toString();
                enteredpassword2 = etUserPasswort2.getText().toString();
                enteredTelnr = etTelefonnummer.getText().toString();
                enteredGeb = etGeburtsdatum.getText().toString();
                userGender = ((RadioButton) findViewById(rgGeschlecht.getCheckedRadioButtonId())).getText().toString();

                String serverUrl = "http://www.pou-pou.de/stagedriver/android/register.php";
                AsyncDataClass asyncRequestObject = new AsyncDataClass();
                asyncRequestObject.execute(serverUrl, enteredname, enteredemail, enteredpassword, enteredpassword2, enteredTelnr, enteredGeb, userGender);

                if (enteredname.equals("") || enteredemail.equals("") || enteredpassword.equals("") || enteredpassword2.equals("") || enteredGeb.equals("")) {
                    Toast.makeText(JetztRegistrieren.this, "Bitte alle Felder ausfüllen", Toast.LENGTH_LONG).show();
                    return;
                }
            }

            class AsyncDataClass extends AsyncTask<String, Void, String> {
                @Override
                protected String doInBackground(String... params) {
                    HttpParams httpParameters = new BasicHttpParams();
                    HttpConnectionParams.setConnectionTimeout(httpParameters, 5000);
                    HttpConnectionParams.setSoTimeout(httpParameters, 5000);
                    HttpClient httpClient = new DefaultHttpClient(httpParameters);
                    HttpPost httpPost = new HttpPost("http://www.pou-pou.de/stagedriver/android/register.php");
                    String jsonResult = "";
                    try {
                        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                        nameValuePairs.add(new BasicNameValuePair("enteredname", params[1]));
                        nameValuePairs.add(new BasicNameValuePair("enteredemail", params[2]));
                        nameValuePairs.add(new BasicNameValuePair("enteredpassword", params[3]));
                        nameValuePairs.add(new BasicNameValuePair("enteredpassword2", params[4]));
                        nameValuePairs.add(new BasicNameValuePair("enteredTelnr", params[5]));
                        nameValuePairs.add(new BasicNameValuePair("enteredGeb", params[6]));
                        nameValuePairs.add(new BasicNameValuePair("userGender", params[7]));

                        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                        HttpResponse response = httpClient.execute(httpPost);
                        jsonResult = inputStreamToString(response.getEntity().getContent()).toString();
                    } catch (ClientProtocolException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    return jsonResult;
                }

                @Override
                protected void onPreExecute() {
                    super.onPreExecute();
                }

                @Override
                protected void onPostExecute(String result) {
                    super.onPostExecute(result);

                    int jsonResult = returnParsedJsonObject(result);
                    if (jsonResult == 0) {
                        Toast.makeText(JetztRegistrieren.this, "Passwörter stimmen nicht überein", Toast.LENGTH_LONG).show();
                        return;
                    }
                    if (jsonResult == 1) {
                        Intent intent = new Intent(JetztRegistrieren.this, Startseite.class);
                        Toast.makeText(JetztRegistrieren.this, "Willkommen bei Stage Driver! Jetzt loslegen.", Toast.LENGTH_LONG).show();
                        startActivity(intent);
                        return;
                    }
                    System.out.println("Resulted Value: " + result);
                }

                private StringBuilder inputStreamToString(InputStream is) {
                    String rLine = "";
                    StringBuilder answer = new StringBuilder();
                    BufferedReader br = new BufferedReader(new InputStreamReader(is));
                    try {
                        while ((rLine = br.readLine()) != null) {
                            answer.append(rLine);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    return answer;
                }
            }

                private int returnParsedJsonObject(String result) {
                    JSONObject resultObject = null;
                    int returnedResult = 2;
                    try {
                        resultObject = new JSONObject(result);
                        returnedResult = resultObject.getInt("success");
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    return returnedResult;
                }
            });
        }
    }

这是php文件:

<?php
include('config.php');
session_start();

$name = $_POST["enteredname"];
$pass = $_POST["enteredpassword"];
$pass2 = $_POST["enteredpassword2"];
$email = $_POST["enteredemail"];
$tel = $_POST["enteredTelnr"];
$geb = $_POST["enteredGeb"];
$gender = $_POST["userGender"];

if($pass != $pass2) {
    $success = 0;
}
else    {
    $hash = md5($pass);
    $speichern = "INSERT INTO user (user_name, user_pw, user_mail, user_tel, user_geb, user_geschl)
                    VALUES('$name', '$hash', '$email', '$tel', '$geb', '$gender');";
    mysql_query($speichern) or die(mysql_error());
    if($speichern)  {
        $success = 1;
    }
}
echo json_encode($success);
?>

提前致谢!

2 个答案:

答案 0 :(得分:0)

问题是您没有为要返回的内容类型返回HTTP标头。

将其添加到php脚本的顶部:

header("Content-Type: application/json;charset=utf-8");

答案 1 :(得分:0)

所以我认为我发现了错误,在日志中它表示jsonresult无法转换,这是因为在PHP脚本中我写了$ success = 0;但我认为它必须像$ response [“success”] = 0;