我正在通过php从mysql数据库访问数据,
在我的代码中显示无法将字符串转换为json对象的错误。
而且,以及我不知道如何在android中获取json值。
这里所有的错误是什么?

我的PHP文件

<?php
$con=mysql_connect("localhost","arun","sachin11");
$rows = array();
$db_select = mysql_select_db('Schoolapp', $con);
$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT ChildPassportName,ChildID FROM SchoolDB where Username='$username' and Password='$password'",$con);
while($r = mysql_fetch_assoc($result)) {
    $rows[] = $r;
}
print json_encode($rows);

mysql_close($con);
?>


我的ChildProfile.java

public class ChildProfile extends Activity {
    private TextView childname,childid;

    private Button get;
    private EditText username,password;
    private JSONObject jObj;
    private static String user,pass,json;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.child_profile);
        username=(EditText) findViewById(R.id.profile_username);
        password=(EditText) findViewById(R.id.profile_password);
        childname=(TextView) findViewById(R.id.profile_email);
        childid=(TextView) findViewById(R.id.profile_childid);
        get=(Button) findViewById(R.id.profile_button1);
        get.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                new sendPostData().execute();
            }
        });
    }
    private class sendPostData extends AsyncTask<String, Void, String>
    {
            @Override
        protected String doInBackground(String... params) {


                    user=username.getText().toString();
                    pass=password.getText().toString();
                    String link="http://192.168.1.22:81/arun/new.php?";
                    String data  = URLEncoder.encode("username", "UTF-8")
                    + "=" + URLEncoder.encode(user, "UTF-8");
                    data += "&" + URLEncoder.encode("password", "UTF-8")
                    + "=" + URLEncoder.encode(pass, "UTF-8");
                    URL url = new URL(link);
                    URLConnection conn = url.openConnection();
                    conn.setDoOutput(true);
                    OutputStreamWriter wr = new OutputStreamWriter
                    (conn.getOutputStream());
                    wr.write( data );
                    wr.flush();
                    BufferedReader reader = new BufferedReader
                    (new InputStreamReader(conn.getInputStream()));
                    StringBuilder sb = new StringBuilder();
                    String line = null;
                    // Read Server Response
                    while((line = reader.readLine()) != null)
                    {
                       sb.append(line);
                       break;
                    }
                    json=sb.toString();
                    jObj = new JSONObject(json);
                   return jObj;

        }
           @Override
        protected void onPostExecute(String result) {
            //View your result here.
               childname.settext(result.getstring["ChildPassportName"]);
               childid.settext(result.getstring["ChildID"]);
            }
     }

    }

最佳答案

显然,它将抛出Typemismatch,而您将返回JSONObject,而您的onPostExecute()接受String

您需要像这样更改您的AsyncTask

private class sendPostData extends AsyncTask<String, Void, JSONObject>


onPostExecute()到此:

@Override
protected void onPostExecute(JSONObject result) {
    childname.settext(result.getstring("ChildPassportName"));
    childid.settext(result.getstring("ChildID"));
}


[编辑]只需要再修复一个
像这样更改doInBackground()

protected JSONObject doInBackground(String... params){
    ....
    ....
}


它的身体应该保持原样。
希望能帮助到你。 :)

10-06 13:11
查看更多