在Android onPostExecute中显示警报对话框或Toast

时间:2015-03-10 08:55:19

标签: android json

如果我得到json响应就好了那么我需要继续进行,如果我得到任何错误然后我想在Toast或Alert对话框中只打印那个错误,但它不工作。任何人请告诉我什么是我的第二个if条件在代码中的问题?是不是能够举杯祝酒?

这是我遇到错误的json结果

{“result”:“错误”,“错误”:“无效参数”}

我需要在Toast或Alert对话框中显示无效参数。

    protected void onPostExecute(String result) {
        prgDialog.hide();
        Toast.makeText(getBaseContext(), result, Toast.LENGTH_LONG).show();
        try {
            JSONObject json = new JSONObject(result);
            String respResult=json.getString("result");
            String respId=json.getString("customer_id");
            String respEmail=json.getString("customer_email");
            String respError=json.getString("error");
            session.createUserLoginSession(respId, respEmail);
            if(respResult.equals("ok")) {
                Intent I = new Intent();
                I.setClass(getApplicationContext(), MainActivity.class);
                startActivity(I);
                finish();
            }
            if(respResult.equals("error")) {
                Toast.makeText(getBaseContext(), respError, Toast.LENGTH_LONG).show();
            }

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

3 个答案:

答案 0 :(得分:1)

您的代码正在获取异常,因为您在出现错误时获得的响应json,不包含以下参数

"customer_id"
"customer_email"

像这样编写代码

 try {
            JSONObject json = new JSONObject(result);
            String respResult=json.getString("result");

            if(respResult.equals("ok")) {

            String respId=json.getString("customer_id");
            String respEmail=json.getString("customer_email");
            session.createUserLoginSession(respId, respEmail);

                Intent I = new Intent();
                I.setClass(getApplicationContext(), MainActivity.class);
                startActivity(I);
                finish();
            }
            if(respResult.equals("error")) {
                String respError=json.getString("error");
                Toast.makeText(getApplicationContext(), respError, Toast.LENGTH_LONG).show();
            }

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

答案 1 :(得分:0)

为什么你把错误变量放在上面?它应该是

protected void onPostExecute(String result) {
        prgDialog.hide();
        Toast.makeText(getBaseContext(), result, Toast.LENGTH_LONG).show();
        try {
            JSONObject json = new JSONObject(result);
            String respResult=json.getString("result");

            if(respResult.equals("ok")) {
                String respId=json.getString("customer_id");
                String respEmail=json.getString("customer_email");
                session.createUserLoginSession(respId, respEmail);
                Intent I = new Intent();
                I.setClass(getApplicationContext(), MainActivity.class);
                startActivity(I);
                finish();
            }
            if(respResult.equals("error")) {
                String respError=json.getString("error");
                Toast.makeText(getApplicationContext(), respError, Toast.LENGTH_LONG).show();
            }

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

答案 2 :(得分:0)

问题是您应该使用 getApplicationContext()而不是 getBaseContext()。第一个应用程序运行时始终可用,第二个应用程序不再可用。如您的代码中所示,您在AsyncTask中的onPostExecute()中,那时您的上下文(活动?)无法使用。