解析数据时出错:JSONException:Value

时间:2014-10-06 07:14:03

标签: java php android json

我正在办理登记表格。我有两个课程:ClientServer.javaJSONParser.java

ClientServer.java:

package com.example.mapsdemo;        
    import java.util.ArrayList;
    import java.util.List;      
    import org.apache.http.NameValuePair;
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONException;
    import org.json.JSONObject;



    import android.app.Activity;
    import android.content.Intent;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;

    public class Clientserver extends Activity {            
        EditText username,email,password;
        Button signup,intent;
        String mpostusername,mpostpassword,mpostemail;

           private static final String TAG_SUCCESS = "success";
         JSONParser jsonParser = new JSONParser();

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

            username = (EditText) findViewById(R.id.username);

            email = (EditText) findViewById(R.id.email);

            password = (EditText) findViewById(R.id.password);

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

            intent = (Button)findViewById(R.id.go);

                    //Setup the Button's OnClickListener
                    signup.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            //Get the data
                             new CreateNewAccount().execute();

                                Log.d("my", "in onclick...create new account executed");
                }
            });

                    intent.setOnClickListener(new View.OnClickListener() {

                        @Override
                        public void onClick(View v) {
                            // TODO Auto-generated method stub
                            Intent i = new Intent(Clientserver.this,MainActivity.class);
                            startActivity(i);
                        }
                    });
        }

        class CreateNewAccount extends AsyncTask<String, String, String> {

            /**
             * Before starting background thread Show Progress Dialog
             * */

            /**
             * Creating product
             * */
            protected String doInBackground(String... args) {

                Log.d("my", "in doInBackground()");     

                mpostusername = username.getText().toString();
                 mpostemail = email.getText().toString();
                 mpostpassword = password.getText().toString();


                    Log.d("my", "getting inputs is executed");
                 List<NameValuePair> params = new ArrayList<NameValuePair>();

                    params.add(new BasicNameValuePair("username",mpostusername));
                    params.add(new BasicNameValuePair("email",mpostemail));
                    params.add(new BasicNameValuePair("password",mpostpassword));
                    Log.d("my", "parameter adding executed");

                JSONObject json = jsonParser.makeHttpRequest("http://<ip_address>/android_connect/register.php","POST", params);        

                if(json!=null){
                      // do something                    
                Log.d("my", "http request made successfully");

                try {
                    int success = json.getInt(TAG_SUCCESS);         
                    Log.d("my", "JSON tag_success is working");                         
                    if (success == 1) {                         
                        Log.d("my", "in success=1"); 
                        // successfully created product
                        Intent i = new Intent(getApplicationContext(), MainActivity.class);
                        startActivity(i);

                        // closing this screen
                        finish();
                    } else {                            
                        Log.d("my", "In else");                          
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                }
                return null;
            }
        }
    }

JSONParser.java

package com.example.mapsdemo;    
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;     
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;     
public class JSONParser {

    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";     
    // constructor
    public JSONParser() {

    }

    // function get json from url
    // by making HTTP POST or GET mehtod
    public JSONObject makeHttpRequest(String url, String method,
            List<NameValuePair> params) {     
        // Making HTTP request
        try {

            // check for request method
            if(method.equals("POST")){
                // request method is POST
                // defaultHttpClient                    
                Log.d("my", "method equals POST is working");
                DefaultHttpClient httpClient = new DefaultHttpClient();

                Log.d("my", "HTTp client is working");
                HttpPost httpPost = new HttpPost(url);
                Log.d("my", "HTTp post is working");                    
                httpPost.setEntity(new UrlEncodedFormEntity(params));                    
                Log.d("my", "url encoded");     
                HttpResponse httpResponse = httpClient.execute(httpPost);                    
                Log.d("my", "HTTp response is working");
                HttpEntity httpEntity = httpResponse.getEntity();                    
                Log.d("my", "HTTp entity is working");                  
                is = httpEntity.getContent();
                Log.d("my", "getcontent is working");     
            }else if(method.equals("GET")){
                // request method is GET
                DefaultHttpClient httpClient = new DefaultHttpClient();
                String paramString = URLEncodedUtils.format(params, "utf-8");
                url += "?" + paramString;
                HttpGet httpGet = new HttpGet(url);     
                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
            }           

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;     
    }
}

db_connect.php

<?php
$connection = mysql_connect('http://xxx.xxx.xxx.xx/phpmyadmin', 'xxxx', 'xxxxx');
if (!$connection){
    die("Database Connection Failed" . mysql_error());
}
$select_db = mysql_select_db('accountsb');
if (!$select_db){
    die("Database Selection Failed" . mysql_error());
}

register.php

<?php
    require('db_connect.php');    
   $response = array();            
   $username= $_POST['username'];       
   $email = $_POST['email'];            
   $password = $_POST['password'];              

        $query = "INSERT INTO `account` (username,email,password) VALUES ('$username', '$email', '$password')";
        $result = mysql_query($query); 
        if($result){
  $response["success"] = 1;
        $response["message"] = "account successfully created.";     
        // echoing JSON response
        echo json_encode($response);                
        }
        else
        {
             $response["success"] = 0;
        $response["message"] = "Oops! An error occurred.";

        // echoing JSON response
        echo json_encode($response);
         }
    ?>

错误:

0-06 12:16:45.340:E / JSON Parser(8630):解析数据时出错org.json.JSONException:Value

这是我的logcat过滤日志

10-06 12:31:09.800: D/my(11813): in onclick...create new account executed
10-06 12:31:09.800: D/my(11813): in doInBackground()
10-06 12:31:09.800: D/my(11813): getting inputs is executed
10-06 12:31:09.800: D/my(11813): parameter adding executed
10-06 12:31:09.800: D/my(11813): method equals POST is working
10-06 12:31:09.800: D/my(11813): HTTp client is working
10-06 12:31:09.800: D/my(11813): HTTp post is working
10-06 12:31:09.800: D/my(11813): url encoded
10-06 12:31:12.090: D/my(11813): HTTp response is working
10-06 12:31:12.090: D/my(11813): HTTp entity is working
10-06 12:31:12.090: D/my(11813): getcontent is working

注意: 1.我在SO上看过很多类似的问题并尝试了很多解决方案,但是在尝试了大约2个小时后它没有用。所以,请不要将dulicate.plz标记为dulicate.plz帮助。

  1. 我的PHP代码遭受SQL注入,我知道。但是,这只是为了练习,我将来会用mysqli和PDO编辑它们。

2 个答案:

答案 0 :(得分:0)

尝试在您的PHP中放置isset以确保它们获得所有值(与所需字段一样工作)另外我认为问题出在您的查询中

$result = mysql_query("INSERT INTO accounts(email, password, username) 
    values ('$email','$password','$username')");

试试这个。此外,如果您的URL似乎是命令提示符中的问题,请使用ipconfig并获取最顶层的ipv4地址并将其作为您的端口。

答案 1 :(得分:0)

// Json Handler

public class ServiceHandler {

static String response = null;
public final static int GET = 1;
public final static int POST = 2;

public ServiceHandler() {

}

/**
 * Making service call
 * @url - url to make request
 * @method - http request method
 * */
public String makeServiceCall(String url, int method) {
    return this.makeServiceCall(url, method, null);
}

/**
 * Making service call
 * @url - url to make request
 * @method - http request method
 * @params - http request params
 * */
public String makeServiceCall(String url, int method,
        List<NameValuePair> params) {
    try {
        // http client
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpEntity httpEntity = null;
        HttpResponse httpResponse = null;

        // Checking http request method type
        if (method == POST) {
            HttpPost httpPost = new HttpPost(url);
            // adding post params
            if (params != null) {
                httpPost.setEntity(new UrlEncodedFormEntity(params));
            }

            httpResponse = httpClient.execute(httpPost);

        } else if (method == GET) {
            // appending params to url
            if (params != null) {
                String paramString = URLEncodedUtils
                        .format(params, "utf-8");
                url += "?" + paramString;
            }
            HttpGet httpGet = new HttpGet(url);

            httpResponse = httpClient.execute(httpGet);

        }
        System.out.println("Status in url =====" + httpResponse.getStatusLine().getStatusCode());
        httpEntity = httpResponse.getEntity();
        response = EntityUtils.toString(httpEntity);

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return response;

}

}