JSON异常:类型字符串的值无法转换为JSON对象?

时间:2014-08-15 17:35:11

标签: php android mysql json

尝试运行以下代码时出现此错误:一个简单的登录/向上Android活动链接到PHP脚本和MYSQL数据库,托管在{{ 1}}。

我该如何解决这个问题?注意:这是在停止填充数据库。

点击提交按钮后

00WebHost

LongOperation类:

public void onClick(View v) {


                // get The User name and Password
                String userName=editTextUserName.getText().toString();
                String password=editTextPassword.getText().toString();

                  // WebServer Request URL
                String serverURL = "http://ry.net16.net/login_web_service.php?username=" + userName + "&password=" + password;

                // Use AsyncTask execute Method To Prevent ANR Problem
                new LongOperation().execute(serverURL);

                Log.d("trace url", "URL TRACE");

                {

                }

                {

                }
            }
        });

对应的PHP脚本:(已排除登录详细信息

 private class LongOperation  extends AsyncTask<String, Void, Void> {

        // Required initialization

        private final HttpClient Client = new DefaultHttpClient();
        private String Content;
        private String Error = null;
        private ProgressDialog Dialog = new ProgressDialog(SignInActivity.this);
        String data =""; 
        int sizeData = 0;  


        protected void onPreExecute() {
            // NOTE: You can call UI Element here.

            //Start Progress Dialog (Message)

            Dialog.setMessage("Please wait..");
            Dialog.show();



        }

        // Call after onPreExecute method
        protected Void doInBackground(String... urls) {

            /************ Make Post Call To Web Server ***********/
            BufferedReader reader=null;

                 // Send data 
                try
                { 

                   // Defined URL  where to send data
                   URL url = new URL(urls[0]);

                  // Send POST data request

                  URLConnection conn = url.openConnection(); 
                  conn.setDoOutput(true); 
                  OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
                  wr.write( data ); 
                  wr.flush(); 

                  // Get the server response 

                  reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                  StringBuilder sb = new StringBuilder();
                  String line = null;

                    // Read Server Response
                    while((line = reader.readLine()) != null)
                        {
                               // Append server response in string
                               sb.append(line + "");
                        }

                    // Append Server Response To Content String 
                   Content = sb.toString();
                }
                catch(Exception ex)
                {
                    Error = ex.getMessage();
                }
                finally
                {
                    try
                    {

                        reader.close();
                    }

                    catch(Exception ex) {}
                }

            /*****************************************************/
            return null;
        }

        protected void onPostExecute(Void unused) {
            // NOTE: You can call UI Element here.

            // Close progress dialog
            Dialog.dismiss();

            if (Error != null) {


               // uiUpdate.setText("Output : "+Error);

            } else {

                // Show Response Json On Screen (activity)
              //  uiUpdate.setText( Content );

             /****************** Start Parse Response JSON Data *************/

                String OutputData = "";
                JSONObject jsonResponse;

                try {

                     /****** Creates a new JSONObject with name/value mappings from the JSON string. ********/
                     jsonResponse = new JSONObject(Content);

                     String result = jsonResponse.get("result").toString();

                     if (result.equals("true"))
                        {
                            SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE); 
                            Editor editor = pref.edit();                     

                            /**************** Storing data as KEY/VALUE pair *******************/

                            editor.putBoolean("loggedIn", true);           // Saving boolean - true/false


                            // Save the changes in SharedPreferences
                            editor.commit(); // commit changes                              

                            Toast.makeText(SignInActivity.this, "Congrats: Login Successfull", Toast.LENGTH_LONG).show();


                             Intent i = new Intent(SignInActivity.this ,  MainActivity.class);
                             startActivity(i);


                        }
                     else
                    {
                        Toast.makeText(SignInActivity.this, "User Name or Password does not match. Please Sign Up if you are new. ", Toast.LENGTH_LONG).show();
                    }


                    }
                 /****************** End Parse Response JSON Data *************/    

                  catch (JSONException e) {

                     e.printStackTrace();
                 }


             }
        }

    }

完整Logcat错误:

 <?php


    // To check if passed parameters are present or not.
    if(isset($_GET['username']) && isset($_GET['password']))
    {

//NOTE THESE ARE INTENTIONALLY LEFT BLANK FOR SECURITY
    $mysql_host = "";
    $mysql_database = "";
    $mysql_user = "";
    $mysql_password = "";

    // Provide host ip, mysql user name, password to make connection
     $con = mysql_connect($mysql_host,$mysql_user,$mysql_password);

    // Provide database name.
    mysql_select_db($mysql_database);


    // Fetching the passed parameters 
        $username=$_GET['username'];

        $password=$_GET['password'];

        $flag="false";

    // Checking if parameters are not null
        if(!empty($username) && !empty($password))
        {


            $sql="select * from `Login` where `UserName`='$username' and `Password`='$password' ";


            $result=mysql_query($sql);

            if($result)
            {
                // count number of rows returned .
                $count= mysql_num_rows($result);
                if($count > 0)
                {
                    $flag="true"; //result true 

                }               

            }
                    // closing connection
                       mysql_close($con);
            //returning json response 
            echo json_encode(array("result"=>$flag));
        }



    }

    ?>          

修改: JSON PARSER CLASS:

以下是与应用程序相关的JSON解析器类。

08-15 18:24:59.117: W/System.err(29260): org.json.JSONException: Value <br><table of type java.lang.String cannot be converted to JSONObject
08-15 18:24:59.117: W/System.err(29260):    at org.json.JSON.typeMismatch(JSON.java:111)
08-15 18:24:59.117: W/System.err(29260):    at org.json.JSONObject.<init>(JSONObject.java:159)
08-15 18:24:59.117: W/System.err(29260):    at org.json.JSONObject.<init>(JSONObject.java:172)
08-15 18:24:59.117: W/System.err(29260):    at com.hmkcode.android.sign.SignUpActivity$LongOperation.onPostExecute(SignUpActivity.java:160)
08-15 18:24:59.117: W/System.err(29260):    at com.hmkcode.android.sign.SignUpActivity$LongOperation.onPostExecute(SignUpActivity.java:1)
08-15 18:24:59.117: W/System.err(29260):    at android.os.AsyncTask.finish(AsyncTask.java:632)
08-15 18:24:59.117: W/System.err(29260):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
08-15 18:24:59.117: W/System.err(29260):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
08-15 18:24:59.117: W/System.err(29260):    at android.os.Handler.dispatchMessage(Handler.java:102)
08-15 18:24:59.127: W/System.err(29260):    at android.os.Looper.loop(Looper.java:157)
08-15 18:24:59.127: W/System.err(29260):    at android.app.ActivityThread.main(ActivityThread.java:5356)
08-15 18:24:59.127: W/System.err(29260):    at java.lang.reflect.Method.invokeNative(Native Method)
08-15 18:24:59.127: W/System.err(29260):    at java.lang.reflect.Method.invoke(Method.java:515)
08-15 18:24:59.127: W/System.err(29260):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
08-15 18:24:59.127: W/System.err(29260):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
08-15 18:24:59.127: W/System.err(29260):    at dalvik.system.NativeStart.main(Native Method)
08-15 18:24:59.147: E/ViewRootImpl(29260): sendUserActionEvent() mView == null

5 个答案:

答案 0 :(得分:0)

试试这个:

String serverURL = "http://ry.net16.net/login_web_service.php?username=" + URLEncoder.encode(userName) + "&password=" + URLEncoder.encode(password);

答案 1 :(得分:0)

问题在于非JSON字符串

什么是

  

http://ry.net16.net/login_web_service.php?username=&#34; + userName +&#34;&amp; password =&#34; +密码

在浏览器中给出?如果这不是JSON输出,那么您需要检查URL为何没有为您提供JSON格式的文本。

请发布网址的输出。

答案 2 :(得分:0)

你的PHP脚本存在严重问题,我只是在浏览器中打开了这个URL,看到了很多错误。简而言之,PHP脚本没有返回任何JSON它给你HTML这只是所有PHP警告......

答案 3 :(得分:0)

您收到此错误是因为您没有获得实际的JSON编码响应。正如其他答案中所提到的,您在尝试连接数据库时遇到错误。:

Warning: mysql_connect() [function.mysql-connect]: Host 'srv36.000webhost.com' is not allowed to connect to this MySQL server in /home/a5369581/public_html/login_web_service.php on line 14

您需要确保$mysql_user在MySQL数据库上设置了相应的权限。如果php脚本位于000webhost服务器上,该服务器也托管您的sql server,那么您应该能够使用成员区域中000webhost仪表板上提供的登录凭据。

答案 4 :(得分:0)

我发现了这个问题,而且非常尴尬,基本上我没有使用log-in的正确MYSQL Database.个详细信息

相关问题