duanruanxian5028 2015-08-17 23:15
浏览 204
已采纳

使用json时android崩溃了

below i have posted my JSONParser code:

public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) {

    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        httpPost.setEntity(new UrlEncodedFormEntity(params));

        HttpResponse httpResponse = httpClient.execute(httpPost);
        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 + "
");
        }
        is.close();
        json = sb.toString();
        Log.e("JSONN ", json);
    } 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;

}

here i use my function to start login :

public JSONObject loginUser(String username, String password){

    // Building Parameters
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", login_tag));
    params.add(new BasicNameValuePair("username", username));
    params.add(new BasicNameValuePair("password", password));
    JSONObject json = jsonParser.getJSONFromUrl(loginURL+login_tag+".php", params);

    return json;
}

i use my functions in an Async task like below:

public void login(View view){
    new ProcessLogin().execute();
}

/**
 * Async Task to get and send data to My Sql database through JSON respone.
 **/
private class ProcessLogin extends AsyncTask<String, String, JSONObject> {


    private ProgressDialog pDialog;

    String username, password;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        usernameField = (EditText) findViewById(R.id.editText1);
        passwordField = (EditText) findViewById(R.id.editText2);

        username = usernameField.getText().toString();
        password = passwordField.getText().toString();

    }

    @Override
    protected JSONObject doInBackground(String... args) {

        UserFunctions userFunction = new UserFunctions();
        JSONObject json = userFunction.loginUser(username, password);
        return json;
    }

    @Override
    protected void onPostExecute(JSONObject json) {

        try {

            int code = json.getInt("code");

            Log.d("myLog", "JSON get code :" + String.valueOf(code));

            if (code == 1) {

                Toast.makeText(getApplicationContext(), "Login Successfully", Toast.LENGTH_LONG).show();
                   Intent upanel = new Intent(getApplicationContext(), MainActivity.class);
                       finish();
                } else {


                }

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

    }
}

here is my php code:

<?php
$con=mysqli_connect("localhost","root","","my_db");
//echo "Welcome, I am connecting Android to PHP, MySQL";

if (mysqli_connect_errno($con))
{
   //echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

//$username = 'admin';
//$password = 'admin';

$username = $_POST['username'];
$password = $_POST['password'];





//Für die Überprüfung
$result = mysqli_query($con,"SELECT * FROM user where Username='$username' and Password='$password'");


 //if($result){




//$user = $user_details 
//$flag['code'] =0;
$response['code'] = 0;

if(mysqli_num_rows($result)==1){
    $flag['code']=1;

    //Für UserDetails

    $user_details = mysqli_fetch_array($result);


    //User wird im JSON Object gespeichert
    $response["code"] = 1;
    $response["user"]["user_id"] = $user_details["user_id"];
    $response["user"]["username"] = $user_details["Username"];
    $response["user"]["password"] = $user_details["Password"];
    $response["user"]["email"] = $user_details["E-Mail"];



} else {
    $response['code'] = 0;
    //$flag['code']=0;

}

// }    


//print(json_encode($flag));
//print(json_encode($user_details));
print json_encode($response);


mysqli_close($con);
?>

i know that it would be better to hash my passwords, but i want to do this later on. i added more logs and now i have this log :

08-18 14:03:14.313 1444-1459/? E/HTTPClient﹕ org.apache.http.conn.EofSensorInputStream@1abaea2f 08-18 14:03:14.317 1444-1459/? E/Buffered Reader﹕ java.io.BufferedReader@244a383c 08-18 14:03:14.322 1444-1459/? E/String Builder﹕ {"code":1,"user":{"user_id":"3","username":"david","password":"david","email":"david"}} 08-18 14:03:14.322 1444-1459/? E/JSON﹕ {"code":1,"user":{"user_id":"3","username":"david","password":"david","email":"david"}} 08-18 14:03:14.439 55-55/? D/gralloc﹕ Registering a buffer in the process that created it. This may cause memory ordering problems. 08-18 14:03:14.439 55-55/? E/libEGL﹕ called unimplemented OpenGL ES API 08-18 14:03:14.440 55-55/? E/SurfaceFlinger﹕ glCheckFramebufferStatusOES error 0 08-18 14:03:14.440 55-55/? E/SurfaceFlinger﹕ got GL_FRAMEBUFFER_COMPLETE_OES error while taking screenshot

the app doesnt make screenshots or something like this. i think the error could be with the JSON Object

this is just a part of it , but i think this should be enough.

thanks for any helps or advises

  • 写回答

2条回答 默认 最新

  • duandao2083 2015-08-18 14:34
    关注

    I did not see where you start the activity, you just finish the current one try this:

    Intent upanel = new Intent(getApplicationContext(), MainActivity.class);
    startActivity(upanel);
    //finish();
    

    Other than that, JSON looks valid and logs do not show crash.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败