【问题标题】:org.json.JSONException: Expected ':' after main at character 6 of {main}( )org.json.JSONException:在 {main}( ) 的第 6 个字符处的 main 之后应为 ':'
【发布时间】:2016-01-19 06:07:17
【问题描述】:

这是我的 php 代码。

<?php
$con= mysqli_connect("localhost","root","123@123","mysql");
$email=$_POST["email"];
$password=$_POST["password"];
$statement = mysqli_prepare($con,"select * from Userdata where email = ? and password = ? ");
mysqli_stmt_bind_param($statement, "ss", $email, $password);
mysqli_stmt_execute($statement);
mysqli_stmt_store_result($statement);
mysqli_stmt_bind_result($statement,$name,$email,$password,$phone);
$user = array();
while(mysqli_stmt_fetch($statement)){
    $user[name]= $name;
    $user[email]=$email;
    $user[password]=$password;
    $user[phone]=$phone;        
}
    $users = array_values($user);
    echo json_encode($user);

mysqli_stmt_close($statement);
mysqli_close($con);
?>

这是我的 java 代码。

package com.mycompany.nowapp;

import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
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.apache.http.util.EntityUtils;
import org.json.JSONObject;

import java.util.ArrayList;


public class ServerRequests {
ProgressDialog progressDialog;
public static final int CONNECTION_TIMEOUT = 5000 * 15;


public static final String SERVER_ADDRESS = "http://10.0.2.2/myfiles/";
public ServerRequests(Context context) {
    progressDialog = new ProgressDialog(context);
    progressDialog.setCancelable(false);
    progressDialog.setTitle("Processing...");
    progressDialog.setMessage("Please wait...");
}

public void storeUserDataInBackground(User user,
                                      GetUserCallback userCallBack) {
    progressDialog.show();
    new StoreUserDataAsyncTask(user, userCallBack).execute();
}

public void fetchUserDataAsyncTask(User user, GetUserCallback userCallBack) {
    progressDialog.show();
    new fetchUserDataAsyncTask(user, userCallBack).execute();
}

/**
 * parameter sent to task upon execution progress published during
 * background computation result of the background computation
 */

public class StoreUserDataAsyncTask extends AsyncTask<Void, Void, Void> {
    User user;
    GetUserCallback userCallBack;

    public StoreUserDataAsyncTask(User user, GetUserCallback userCallBack) {
        this.user = user;
        this.userCallBack = userCallBack;
    }

    @Override
    protected Void doInBackground(Void... params) {
        ArrayList<NameValuePair> dataToSend = new ArrayList<>();
        dataToSend.add(new BasicNameValuePair("name", user.name));
        dataToSend.add(new BasicNameValuePair("email", user.email));
        dataToSend.add(new BasicNameValuePair("password", user.password));
        dataToSend.add(new BasicNameValuePair("phone", user.phone + ""));

        HttpParams httpRequestParams = getHttpRequestParams();

        HttpClient client = new DefaultHttpClient(httpRequestParams);
        HttpPost post = new HttpPost(SERVER_ADDRESS
                + "Register.php");

        try {
            post.setEntity(new UrlEncodedFormEntity(dataToSend));
            client.execute(post);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    private HttpParams getHttpRequestParams() {
        HttpParams httpRequestParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpRequestParams,
                CONNECTION_TIMEOUT);
        HttpConnectionParams.setSoTimeout(httpRequestParams,
                CONNECTION_TIMEOUT);
        return httpRequestParams;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        progressDialog.dismiss();
        userCallBack.done(null);
    }

}

public class fetchUserDataAsyncTask extends AsyncTask<Void, Void, User> {
    User user;
    GetUserCallback userCallBack;

    public fetchUserDataAsyncTask(User user, GetUserCallback userCallBack) {
        this.user = user;
        this.userCallBack = userCallBack;
    }

    @Override
    protected User doInBackground(Void... params) {
        ArrayList<NameValuePair> dataToSend = new ArrayList<>();
        dataToSend.add(new BasicNameValuePair("email", user.email));
        dataToSend.add(new BasicNameValuePair("password", user.password));

        HttpParams httpRequestParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpRequestParams,
                CONNECTION_TIMEOUT);
        HttpConnectionParams.setSoTimeout(httpRequestParams,
                CONNECTION_TIMEOUT);

        HttpClient client = new DefaultHttpClient(httpRequestParams);
        HttpPost post = new HttpPost(SERVER_ADDRESS
                + "FetchUserData.php");

        User returnedUser = null;

        try {
            post.setEntity(new UrlEncodedFormEntity(dataToSend));
            HttpResponse httpResponse = client.execute(post);

            HttpEntity entity = httpResponse.getEntity();
            String result = EntityUtils.toString(entity);
            JSONObject jObject = new JSONObject(result);
            //JSONObject jObject =  new JSONObject(result.substring(result.indexOf("{"), result.lastIndexOf("}") + 1));

            if (jObject.length() != 0){
                Log.v("happened", "2");
                String name = jObject.getString("name");
                long phone = jObject.getLong("phone");

                returnedUser = new User(name, phone, user.email,
                        user.password);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return returnedUser;
    }

    @Override
    protected void onPostExecute(User returnedUser) {
        super.onPostExecute(returnedUser);
        progressDialog.dismiss();
        userCallBack.done(returnedUser);
    }
}
}

这是我得到的错误。

01-18 23:36:10.990 21408-21433/com.mycompany.nowapp W/System.err: org.json.JSONException: Expected ':' after main at character 6 of {main}(  )</td><td title='C:\wamp\www\myfiles\FetchUserData.php' bgcolor='#eeeeec'>..\FetchUserData.php<b>:</b>0</td></tr>
01-18 23:36:10.990 21408-21433/com.mycompany.nowapp W/System.err: </table></font>
01-18 23:36:10.990 21408-21433/com.mycompany.nowapp W/System.err: <br />
01-18 23:36:10.990 21408-21433/com.mycompany.nowapp W/System.err: <font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
01-18 23:36:10.990 21408-21433/com.mycompany.nowapp W/System.err: <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Use of undefined constant email - assumed 'email' in C:\wamp\www\myfiles\FetchUserData.php on line <i>17</i></th></tr>
01-18 23:36:10.990 21408-21433/com.mycompany.nowapp W/System.err: <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
01-18 23:36:10.990 21408-21433/com.mycompany.nowapp W/System.err: <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
01-18 23:36:10.990 21408-21433/com.mycompany.nowapp W/System.err: <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0010</td><td bgcolor='#eeeeec' align='right'>243544</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='C:\wamp\www\myfiles\FetchUserData.php' bgcolor='#eeeeec'>..\FetchUserData.php<b>:</b>0</td></tr>
01-18 23:36:10.990 21408-21433/com.mycompany.nowapp W/System.err: </table></font>
01-18 23:36:10.990 21408-21433/com.mycompany.nowapp W/System.err: <br />
01-18 23:36:10.990 21408-21433/com.mycompany.nowapp W/System.err: <font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
01-18 23:36:10.990 21408-21433/com.mycompany.nowapp W/System.err: <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Use of undefined constant password - assumed 'password' in C:\wamp\www\myfiles\FetchUserData.php on line <i>18</i></th></tr>
01-18 23:36:10.990 21408-21433/com.mycompany.nowapp W/System.err: <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
01-18 23:36:10.990 21408-21433/com.mycompany.nowapp W/System.err: <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
01-18 23:36:10.990 21408-21433/com.mycompany.nowapp W/System.err: <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0010</td><td bgcolor='#eeeeec' align='right'>243544</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='C:\wamp\www\myfiles\FetchUserData.php' bgcolor='#eeeeec'>..\FetchUserData.php<b>:</b>0</td></tr>
01-18 23:36:10.990 21408-21433/com.mycompany.nowapp W/System.err: </table></font>
01-18 23:36:10.990 21408-21433/com.mycompany.nowapp W/System.err: <br />
01-18 23:36:11.000 21408-21433/com.mycompany.nowapp W/System.err: <font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
01-18 23:36:11.000 21408-21433/com.mycompany.nowapp W/System.err: <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Use of undefined constant phone - assumed 'phone' in C:\wamp\www\myfiles\FetchUserData.php on line <i>19</i></th></tr>
01-18 23:36:11.000 21408-21433/com.mycompany.nowapp W/System.err: <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
01-18 23:36:11.000 21408-21433/com.mycompany.nowapp W/System.err: <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
01-18 23:36:11.000 21408-21433/com.mycompany.nowapp W/System.err: <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0010</td><td bgcolor='#eeeeec' align='right'>243544</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='C:\wamp\www\myfiles\FetchUserData.php' bgcolor='#eeeeec'>..\FetchUserData.php<b>:</b>0</td></tr>
01-18 23:36:11.000 21408-21433/com.mycompany.nowapp W/System.err: </table></font>
01-18 23:36:11.000 21408-21433/com.mycompany.nowapp W/System.err: {"name":"qwe","email":"qwe","password":"qwe","phone":123123123}
01-18 23:36:11.000 21408-21433/com.mycompany.nowapp W/System.err:     at org.json.JSONTokener.syntaxError(JSONTokener.java:450)
01-18 23:36:11.000 21408-21433/com.mycompany.nowapp W/System.err:     at org.json.JSONTokener.readObject(JSONTokener.java:379)
01-18 23:36:11.000 21408-21433/com.mycompany.nowapp W/System.err:     at org.json.JSONTokener.nextValue(JSONTokener.java:100)
01-18 23:36:11.000 21408-21433/com.mycompany.nowapp W/System.err:     at org.json.JSONObject.<init>(JSONObject.java:155)
01-18 23:36:11.000 21408-21433/com.mycompany.nowapp W/System.err:     at org.json.JSONObject.<init>(JSONObject.java:172)
01-18 23:36:11.000 21408-21433/com.mycompany.nowapp W/System.err:     at com.mycompany.nowapp.ServerRequests$fetchUserDataAsyncTask.doInBackground(ServerRequests.java:140)
01-18 23:36:11.000 21408-21433/com.mycompany.nowapp W/System.err:     at com.mycompany.nowapp.ServerRequests$fetchUserDataAsyncTask.doInBackground(ServerRequests.java:105)
01-18 23:36:11.000 21408-21433/com.mycompany.nowapp W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:288)
01-18 23:36:11.000 21408-21433/com.mycompany.nowapp W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
01-18 23:36:11.000 21408-21433/com.mycompany.nowapp W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
01-18 23:36:11.000 21408-21433/com.mycompany.nowapp W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
01-18 23:36:11.000 21408-21433/com.mycompany.nowapp W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
01-18 23:36:11.000 21408-21433/com.mycompany.nowapp W/System.err:     at java.lang.Thread.run(Thread.java:841)

我是 php 新手,对 Android 有一点了解。我已经完成了这个注册应用程序,数据存储在数据库中,但是当我尝试使用相同的详细信息登录时,我收到了这个错误。

【问题讨论】:

  • JSON 应该是什么样的?
  • 啊,我明白了。没关系
  • 字符串结果 = EntityUtils.toString(entity);打印这个结果,并检查JSONObject jObject = new JSONObject(result);是否有错误
  • 它正在打印我发布的错误日志中出现的类似html的代码。
  • 打错了,应该是JSON格式,不是HTML格式。检查您的 php 代码,并检查 php 代码中的 `json_encode($user);` 是否为 JSON

标签: java php json


【解决方案1】:
       String result = EntityUtils.toString(entity);
       JSONObject jObject = new JSONObject(result);

确保您的变量结果是正确的 JSON 格式 (JSON Viewer)

这应该是您的 php 代码的回显。如果您看到 HTML 格式的文本字符串,这可能来自您的 php 服务器代码,请对其进行调试并检查返回结果。

【讨论】:

  • 嘿,伙计,我对这个 json 和 php 不太感兴趣......告诉我我应该拥有什么以及要做什么......
  • @Andy,我也不知道 php,但是echo json_encode($user); 应该是从服务器返回到您的 android 应用程序的结果,调试它并在那里放置一个断点并监控变量 @ 987654324@,然后使用 json 查看器检查它是否是有效的 JSON。如果你发现php有一些错误,那么从php端修复错误,然后重新检查结果。
  • 越来越像这样 注意:使用未定义的常量名称 - 假定为“名称” 注意:使用未定义的常量电子邮件 - 假定为“电子邮件” 注意:使用未定义的常量密码 - 假定为“密码” 注意:使用未定义的常量电话 - 假设为“电话”我认为错误出现在 mysqli_stmt_bind_result($statement,$name,$email,$password,$phone);请帮我解决这个问题..
  • 看来你没有从 http 请求中获得正确的参数,你从 android 发布。在设置之前检查变量用户:dataToSend.add(new BasicNameValuePair("name", user.name));,确保它具有正确的属性,然后调试到 php 代码并确保 $email=$_POST["电子邮件”]; $password=$_POST["密码"];有正确的值
【解决方案2】:

我认为问题出在 FetchUserData.php 您必须更改这些行:

while(mysqli_stmt_fetch($statement)){
$user[name]= $name;
$user[email]=$email;
$user[password]=$password;
$user[phone]=$phone;        

}

while(mysqli_stmt_fetch($statement)){
$user['name']= $name;
$user['email']=$email;
$user['password']=$password;
$user['phone']=$phone;        

}

所以只需添加'....'

【讨论】:

    猜你喜欢
    • 2015-12-07
    • 2019-12-19
    • 1970-01-01
    • 2010-12-13
    • 2011-01-02
    • 2023-03-15
    • 2023-03-23
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多