来自PHP脚本的JSON响应
我正在为Android建立一个注册系统。我可以向数据库添加数据,这很好。现在,我想添加一些JSON来通知用户注册成功或出现不同的错误。即来自PHP脚本的JSON响应,php,android,json,android-volley,Php,Android,Json,Android Volley,我正在为Android建立一个注册系统。我可以向数据库添加数据,这很好。现在,我想添加一些JSON来通知用户注册成功或出现不同的错误。即 { "status":"success", "message":"Successful Registration" } 或 等等 这是我的php脚本 <?php require "init.php"; $j = new stdClass(); $name = $_POST['name']; $user_name = $
{
"status":"success",
"message":"Successful Registration"
}
或
等等
这是我的php脚本
<?php
require "init.php";
$j = new stdClass();
$name = $_POST['name'];
$user_name = $_POST['user_name'];
$user_pass = md5(md5($_POST['user_name']).$_POST['user_pass']);
if(!$name){
json_encode(array('status' => 'fail', 'message' => 'Please enter your
name'));
}
$sql_query = "insert into user_info
values('$name','$user_name','$user_pass');";
if(mysqli_query($con,$sql_query)){
json_encode(array('status' => 'success', 'message' => 'Successfully
registered'));
}else{
json_encode(array('status' => 'fail', 'message' => 'Could not
register'));
}
?>
什么也没给我
有什么想法吗
谢谢。首先,您应该在问题中提到您正在使用android volley库,或者至少使用标签。第二,如果您试图解析JSON响应,那么应该使用JsonObjectRequest实例来解析。假设您的php脚本发送了正确的JSON,您可以通过截击尝试一些简单而直接的方法,如下所示:
JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
response = response.getJSONObject("args");
String site = response.getString("site"), network = response.getString("network");
View view = findViewById(R.id.activity_layout);
Snackbar.make(view, "Site : " + site + " Network : " + network, Snackbar.LENGTH_INDEFINITE).show();
} catch (JSONException e) {
Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getBaseContext(), "Error Listener", Toast.LENGTH_LONG).show();
}
});
Volley.newRequestQueue(this).add(jsonRequest);
{
"args": {
"network": "somenetwork",
"site": "code"
},
"args2": {
...
},
"args3": "...",
"args4": "..."
}
现在,根据您发送的JSON,您可以尝试任何组合。你也可以研究这个非常有用的方法。希望这有帮助。如果您需要更多帮助,请告诉我。我在尝试注册时,在我的应用程序中遇到了相同的问题。我想检查用户是否注册,用户名是否可用 所以我所做的是: PHP文件:
<?php
try {
$handler = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (Exception $e) {
echo $e->getMessage();
die();
}
$username = $_POST['username'];
$password=$_POST['password'];
$email = $_POST['email'];
$dateCreated = $_POST['dateCreated'];
$android_version= $_POST['android_version'];
$api_level = $_POST['api_level'];
$check = $handler->query("SELECT * FROM table WHERE username = '$username'");
$don = array();
if($check->rowCount() > 0){
$don = array('result' =>TRUE);
die();
}else{
$don = array('result' =>FALSE);
$handler->query("INSERT INTO table(id, username, password, email, dateCreated, activated, Android_Version, API_Level) VALUES('', '$username','$password','$email', '$dateCreated', 0, '$android_version', '$api_level')");
}
echo json_encode($don);
?>
安卓:
私有类MyInsertDataTask扩展了AsyncTask{
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(YourActivity.this);
pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pDialog.setIndeterminate(true);
pDialog.setMessage(getString(R.string.dialog_rate_data_submit));
pDialog.setCancelable(false);
pDialog.setInverseBackgroundForced(true);
pDialog.show();
}
@Override
protected Boolean doInBackground(String... params) {
nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("username", uName));
nameValuePairs.add(new BasicNameValuePair("password", pass));
nameValuePairs.add(new BasicNameValuePair("email", email));
nameValuePairs.add(new BasicNameValuePair("dateCreated", date));
nameValuePairs.add(new BasicNameValuePair("android_version", release));
nameValuePairs.add(new BasicNameValuePair("api_level", String.valueOf(sdkVersion)));
try
{
httpClient = new DefaultHttpClient();
httpPost = new HttpPost(AppConstant.REGISTER_URL);
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
response = httpClient.execute(httpPost);
httpEntity = response.getEntity();
is = httpEntity.getContent();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuilder result = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
result.append(line);
}
Log.e("Responce", result.toString());
if (result != null) {
data = new JSONObject(result.toString());
usernameExists = data.getBoolean("result");
}
}
catch(Exception e)
{
Log.e("Fail 1", e.toString());
}
return usernameExists;
}
@Override
protected void onPostExecute(Boolean aVoid) {
super.onPostExecute(aVoid);
pDialog.dismiss();
if (aVoid){
Snackbar.with(YourActivity.this).type(SnackbarType.MULTI_LINE).text(getString(R.string.username_exists_message)).color(Color.parseColor(AppConstant.ENABLED_BUTTON_COLOR)).show(getActivity());
}else {
Toast.makeText(YourActivity.this, getString(R.string.created_successfully), Toast.LENGTH_SHORT).show();
Intent intent = new Intent(YourActivity.this, MainActivity.class);
startActivity(intent);
YourActivity.this.finish();
}
}
}
结果是,如果用户名存在,则会弹出一条消息,说明用户名已存在,否则用户将注册
结果:
我解决了!这是一个php问题。这是我的解决方案
<?php
require "init.php";
header('Content-type: application/json');
$name = $_POST['name'];
$user_name = $_POST['user_name'];
$user_pass = md5(md5($_POST['user_name']).$_POST['user_pass']);
$sql_query = "select * from user_info WHERE user_name
='".mysqli_real_escape_string($con, $user_name)."'";
$result = mysqli_query($con, $sql_query);
$results = mysqli_num_rows($result);
if ($results){
$don = array('result' =>"fail","message"=>"Username exists. User
a different one");
}else{
$sql_query = "insert into user_info
values('$name','$user_name','$user_pass');";
if(mysqli_query($con,$sql_query)){
$don = array('result' =>"success","message"=>"Successfully
registered!Well done");
}
}
echo json_encode($don);
?>
“我可以向数据库添加数据,这很好。现在我想添加一些JSON”。也可以向该数据库添加?可能他的意思是他想在PHP中创建一个数组,并用JSON编码,以便在设备中显示错误消息是的,这就是我的意思!PHP返回一个字符串,但您的脚本对返回值没有任何作用。您可能想打印它或者将它分配给一个变量,然后在脚本末尾打印它的内容。好吧,我可以很容易地处理GET请求。虽然POST请求比较难…但这有点棘手。一旦你了解了凌空截击的工作原理,这其实并不难。事实上,这比其他大多数方法更容易。这是因为有了API 23,android已经弃用了Apac嘿,截击是你最好的选择,除非你正在做繁重的工作。看看这些教程,你会有很好的理解。谢谢你,先生。它是固定的:。我没有打印来自PHP的json响应。很高兴我能帮助你
<?php
try {
$handler = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (Exception $e) {
echo $e->getMessage();
die();
}
$username = $_POST['username'];
$password=$_POST['password'];
$email = $_POST['email'];
$dateCreated = $_POST['dateCreated'];
$android_version= $_POST['android_version'];
$api_level = $_POST['api_level'];
$check = $handler->query("SELECT * FROM table WHERE username = '$username'");
$don = array();
if($check->rowCount() > 0){
$don = array('result' =>TRUE);
die();
}else{
$don = array('result' =>FALSE);
$handler->query("INSERT INTO table(id, username, password, email, dateCreated, activated, Android_Version, API_Level) VALUES('', '$username','$password','$email', '$dateCreated', 0, '$android_version', '$api_level')");
}
echo json_encode($don);
?>
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(YourActivity.this);
pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pDialog.setIndeterminate(true);
pDialog.setMessage(getString(R.string.dialog_rate_data_submit));
pDialog.setCancelable(false);
pDialog.setInverseBackgroundForced(true);
pDialog.show();
}
@Override
protected Boolean doInBackground(String... params) {
nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("username", uName));
nameValuePairs.add(new BasicNameValuePair("password", pass));
nameValuePairs.add(new BasicNameValuePair("email", email));
nameValuePairs.add(new BasicNameValuePair("dateCreated", date));
nameValuePairs.add(new BasicNameValuePair("android_version", release));
nameValuePairs.add(new BasicNameValuePair("api_level", String.valueOf(sdkVersion)));
try
{
httpClient = new DefaultHttpClient();
httpPost = new HttpPost(AppConstant.REGISTER_URL);
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
response = httpClient.execute(httpPost);
httpEntity = response.getEntity();
is = httpEntity.getContent();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuilder result = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
result.append(line);
}
Log.e("Responce", result.toString());
if (result != null) {
data = new JSONObject(result.toString());
usernameExists = data.getBoolean("result");
}
}
catch(Exception e)
{
Log.e("Fail 1", e.toString());
}
return usernameExists;
}
@Override
protected void onPostExecute(Boolean aVoid) {
super.onPostExecute(aVoid);
pDialog.dismiss();
if (aVoid){
Snackbar.with(YourActivity.this).type(SnackbarType.MULTI_LINE).text(getString(R.string.username_exists_message)).color(Color.parseColor(AppConstant.ENABLED_BUTTON_COLOR)).show(getActivity());
}else {
Toast.makeText(YourActivity.this, getString(R.string.created_successfully), Toast.LENGTH_SHORT).show();
Intent intent = new Intent(YourActivity.this, MainActivity.class);
startActivity(intent);
YourActivity.this.finish();
}
}
}
<?php
require "init.php";
header('Content-type: application/json');
$name = $_POST['name'];
$user_name = $_POST['user_name'];
$user_pass = md5(md5($_POST['user_name']).$_POST['user_pass']);
$sql_query = "select * from user_info WHERE user_name
='".mysqli_real_escape_string($con, $user_name)."'";
$result = mysqli_query($con, $sql_query);
$results = mysqli_num_rows($result);
if ($results){
$don = array('result' =>"fail","message"=>"Username exists. User
a different one");
}else{
$sql_query = "insert into user_info
values('$name','$user_name','$user_pass');";
if(mysqli_query($con,$sql_query)){
$don = array('result' =>"success","message"=>"Successfully
registered!Well done");
}
}
echo json_encode($don);
?>