首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >org.json.JSONException:类型为java.lang.String的值电子邮件在0处已存在,无法转换为JSONObject

org.json.JSONException:类型为java.lang.String的值电子邮件在0处已存在,无法转换为JSONObject
EN

Stack Overflow用户
提问于 2018-10-24 05:05:01
回答 1查看 100关注 0票数 1

我有一个注册表,其中使用json php的用户名,电子邮件,密码和手机,并在运行时将它们存储在php..but中,这是生活中的错误。

org.json.JSONException:类型为java.lang.String的值电子邮件已存在于0处,无法转换为JSONObject W/System.err:

在org.json.JSON.typeMismatch(JSON.java:100)

我的sinup.java是:

代码语言:javascript
复制
   package com.breera.automechanic_storeapp;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class Signup extends AppCompatActivity {
    private RequestQueue mQueue;
    EditText cusname,cusemail,cuspass,cusmobile,confrmpass;
    String cus_name,cus_email,cus_pass,cus_cnfrmPass,cus_mobile;
    Button btnlogin,btnSignup;


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

        cusname=findViewById(R.id.fn);
        cusemail=findViewById(R.id.cusemail);
        cuspass=findViewById(R.id.cuspass);
        cusmobile=findViewById(R.id.cusmobile);
        confrmpass=findViewById(R.id.confrmpass);



        btnlogin=(Button)findViewById(R.id.logbtn);
        btnSignup=findViewById(R.id.signup);

        mQueue = Volley.newRequestQueue(this);


        btnlogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intnt=new Intent(Signup.this,CusLogin.class);
                startActivity(intnt);
            }
        });
        btnSignup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Toast.makeText(Signup.this, "hhh", Toast.LENGTH_SHORT).show();
                onsignup();
            }
        });

    }public void onsignup(){
        cus_name = cusname.getText().toString();
        cus_email = cusemail.getText().toString();
        cus_pass = cuspass.getText().toString();
        cus_cnfrmPass=confrmpass.getText().toString();
        cus_mobile = cusmobile.getText().toString();


        try {
            UrlPassClasa urlPassClasa=new UrlPassClasa("customer/signup.php?name=" + cus_name +"&email=" + cus_email+ "&userpass=" + cus_pass+ "&cus_mobile=" + cus_mobile);


            JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, urlPassClasa.getUrl(), null,
                    new Response.Listener<JSONObject>() {
                        @Override
                        public void onResponse(JSONObject response) {
                            try {
                                JSONArray jsonArray = response.getJSONArray("Signup");
                                JSONObject signup = jsonArray.getJSONObject(0);

                                int signupStatus = signup.getInt("status");
                               // String signupmsg = signup.getString("msg");

                                if (signupStatus == 1) {
                                    Toast.makeText(Signup.this, "han", Toast.LENGTH_SHORT).show();

                                } else {
                                    Toast.makeText(Signup.this, "Failed", Toast.LENGTH_LONG).show();
                                }
                            } catch (JSONException e) {
                                e.printStackTrace();
                            } catch (Exception e) {
                                Toast.makeText(Signup.this, "Error", Toast.LENGTH_LONG).show();
                            }
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    error.printStackTrace();
                }
            });

            mQueue.add(request);


        }//1st try
        catch (Exception e) {
            Toast.makeText(Signup.this, e.getMessage(), Toast.LENGTH_LONG).show();
        }

    }//end mthd
}

activity_signup.xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/bck"
    tools:context=".Signup">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Rider's Signup"
            android:textSize="36sp"
            android:layout_marginTop="5dp"
            android:textColor="#fff"
            android:gravity="center"
            android:textStyle="bold"
            android:fontFamily="cursive"/>
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:background="@drawable/bck"
            android:layout_marginTop="0dp"
            android:layout_marginLeft="10dp"
            android:layout_marginBottom="15dp"
            android:scrollbarAlwaysDrawVerticalTrack="true"
            android:layout_marginRight="10dp">


            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:layout_marginLeft="15dp"
                android:layout_marginRight="15dp"
                android:layout_marginTop="10dp"
                android:layout_marginBottom="10dp"
                android:background="#fff"
                android:elevation="4dp"
                android:padding="10dp">



                    <android.support.design.widget.TextInputLayout
                        android:id="@+id/input_layout_fn"
                        android:layout_width="match_parent"
                        android:layout_marginTop="0dp"
                        android:layout_height="wrap_content"
                        >

                        <EditText
                            android:id="@+id/fn"
                            android:layout_width="fill_parent"
                            android:layout_height="wrap_content"
                            android:drawableLeft="@drawable/ic_people_black_24dp"

                            android:hint="Name"
                            android:inputType="text"
                            android:singleLine="true" />
                    </android.support.design.widget.TextInputLayout>



                <android.support.design.widget.TextInputLayout
                    android:id="@+id/input_layout_email"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                    <EditText
                        android:id="@+id/cusemail"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:drawableLeft="@drawable/ic_email_black_24dp"
                        android:singleLine="true"
                        android:hint="Mail Address"
                        android:inputType="textEmailAddress" />
                </android.support.design.widget.TextInputLayout>

                <android.support.design.widget.TextInputLayout
                    android:id="@+id/input_layout_password"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                    <EditText
                        android:id="@+id/cuspass"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:drawableLeft="@drawable/ic_lock_black_24dp"
                        android:drawableTint="@color/colorPrimaryDark"
                        android:singleLine="true"
                        android:hint="Password"
                        android:inputType="numberPassword" />



                </android.support.design.widget.TextInputLayout>

                <android.support.design.widget.TextInputLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                    <EditText
                        android:id="@+id/confrmpass"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="16dp"
                        android:singleLine="true"
                        android:drawableLeft="@drawable/ic_lock_open_black_24dp"
                         android:hint=" Confirm Password"
                        android:inputType="numberPassword" />
                </android.support.design.widget.TextInputLayout>

                <android.support.design.widget.TextInputLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                    <EditText
                        android:id="@+id/cusmobile"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="16dp"
                        android:singleLine="true"
                        android:drawableLeft="@drawable/ic_phone_android_black_24dp"
                        android:hint=" Mobile No"
                        android:inputType="numberPassword" />
                </android.support.design.widget.TextInputLayout>

                <Button
                    android:id="@+id/logbtn"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:background="@null"
                    android:textAllCaps="false"
                    android:layout_gravity="right"
                    android:textColor="@color/colorPrimaryDark"
                    android:text="Already an account.Login" />


                <Button
                    android:id="@+id/signup"
                    android:layout_width="fill_parent"
                    android:layout_height="40dp"
                    android:layout_margin="5dp"
                    android:background="@drawable/bck"
                    android:text="Sign up"
                    android:textAllCaps="false"
                    android:textColor="#fff"
                    android:textSize="18sp" />
            </LinearLayout>

        </ScrollView>

</LinearLayout>

signup.php:

代码语言:javascript
复制
<?php 
require_once("../includes/db.php");
require_once("../includes/functions.php");

$response["Signup"] = array();

$name = $_REQUEST["name"];
$email = $_REQUEST["email"];
$userpass = $_REQUEST["userpass"];
$phone = $_REQUEST["cus_mobile"];

//$name = "zain";
//$email = "zain@gmail.com";
//$userpass = "123";
//$phone = "123456";
$msg = array();

if (check_customer_email($con, $email)) {
    $msg["status"] = 0;
    $msg["msg"] = "Email Already Exist";
    array_push($response["Signup"], $msg["msg"]);

 }
else {
    $sql = "insert into customer(cus_name, cust_email, cust_userpass,cus_mobile) values ('$name', '$email', '$userpass','$phone')";
    if(mysqli_query($con, $sql)) {
        $msg["status"] = 1; 
        $msg["msg"] = "Values successfully Added";  
        array_push($response["Signup"], $msg["msg"]);
    }
    else {
        $msg["status"] = 0; 
        array_push($response["Signup"], $msg["status"]);
    }

}
echo json_encode($response);

?>

UrlPassClasa.java:

代码语言:javascript
复制
package com.breera.automechanic_storeapp;

public class UrlPassClasa {
    String Url="http://192.168.0.107/auto_mechanic/";

    public UrlPassClasa(String file) {
        Url=Url+file;

    }
    public String getUrl(){
        return Url;

    }

}

数据库:enter image description here

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-24 07:37:10

您应该以在java代码中使用的方式将响应包装在多维数组中。

现在,您已经基本将json数组的signup部分设置为

"Email Already Exist"

这不是要解码的有效json。

这应该能起到作用:in the php part

代码语言:javascript
复制
if (check_customer_email($con, $email)) {
    $msg["status"] = 0;
    $msg["msg"] = "Email Already Exist";
    $response["Signup"][] = $msg;
}
else {
    $sql = "insert into customer(cus_name, cust_email, cust_userpass,cus_mobile) values ('$name', '$email', '$userpass','$phone')";
if(mysqli_query($con, $sql)) {
    $msg["status"] = 1;
    $msg["msg"] = "Values successfully Added";
    $response["Signup"][] = $msg;
}
else {
    $msg["status"] = 0;
    $response["Signup"][] = $msg;
}

罪魁祸首尤其是这条语句和代码中类似的语句

代码语言:javascript
复制
array_push($response["Signup"], $msg["status"]);

$msg['status']将是一个普通字符串,您可能希望将此值设置为数组,而不只是将数组中的一个关键"status"赋给它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52957829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档