android - JSON对象获取问题

标签 android

嗨!

我有一个 Json 对象:

                            HttpResponse responsePOST = client.execute(post);  
                            HttpEntity resEntity = responsePOST.getEntity();
                            final JSONObject jObject = new JSONObject(EntityUtils.toString(resEntity));
                            Log.e("test", jObject.toString());

日志:

{"responseData":null,"responseStatus":200,"responseDetails":null}

代码:

Log.e("test", String.valueOf(jObject.getInt("responseStatus")))`;

日志:

200

从 Json 获取 Int:

                                    if (jObject.getInt("responseStatus")== 200)
                                {
                                    Toast toast ;
                                    toast =     Toast.makeText(getApplicationContext(), "OK", 500);
                                toast.show();
                                    finish();
                                }
 else
                                {
                                    Log.e("else", "else");
                                    //dismissDialog(DIALOG_LOADING);
                                     if (jObject.getInt("responseStatus")== 500)
                                     {
                                         throw new Exception("Server Error");
                                     }
                                     else if (jObject.getInt("responseStatus")== 400)
                                     {
                                         throw new Exception("Wrong User/Password");
                                     }
                                     else
                                     {
                                         throw new Exception();
                                     }
                                }
                              //pd.dismiss(); 


                        } catch (Exception e) {
                            Log.e("catch", "catch");
                             Toast toast ;
                                toast =     Toast.makeText(getApplicationContext(), e.getMessage(), 500);
                            toast.show();

                        }

日志:

 catch
 Value null at responseData of type org.json.JSONObject$1 cannot be converted to JSONObject

日志说responeStatus是200,但是toast和finish没有执行

请帮忙

完整代码:

package com.android.skiptvad;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;

import android.app.Activity;
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;
import android.widget.Toast;


public class Registerusr extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.regusr);
        Button bt = (Button)findViewById(R.id.reguserreq);
        final EditText user = (EditText)findViewById(R.id.reguseruser);
        final EditText pw = (EditText)findViewById(R.id.reguserpw);
        final EditText email  = (EditText)findViewById(R.id.requseremail);
        bt.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (user.getText() != null && pw.getText()!= null && email.getText()!= null)
                {
                    download(user.getText().toString(), md5(pw.getText().toString()), email.getText().toString());
                }

            }
        });
    }
    public void download (final String usr, final String pw, final String email)
    {

            try{
                            HttpClient client = new DefaultHttpClient();  
                            String postURL = "http://surfkid.redio.de/register";
                            HttpPost post = new HttpPost(postURL); 
                                List<NameValuePair> params = new ArrayList<NameValuePair>();
                                params.add(new BasicNameValuePair("username", usr));
                                params.add(new BasicNameValuePair("password", pw));
                              params.add(new BasicNameValuePair("email", email));
                            params.add(new BasicNameValuePair("country_id", "1"));
                                UrlEncodedFormEntity ent = new UrlEncodedFormEntity(params,HTTP.UTF_8);
                                post.setEntity(ent);

                                HttpResponse responsePOST = client.execute(post);  
                                HttpEntity resEntity = responsePOST.getEntity();
                                final JSONObject jObject = new JSONObject(EntityUtils.toString(resEntity));
                                Log.e("test", jObject.toString());
                                Log.e("test", String.valueOf(jObject.getInt("responseStatus")));

                                //JSONObject menuObject = jObject.getJSONObject("responseData");

                                if (jObject.getInt("responseStatus")== 200)
                                {

                                    finish();
                                }


                                else
                                {
                                    Log.e("else", "else");
                                    //dismissDialog(DIALOG_LOADING);
                                     if (jObject.getInt("responseStatus")== 500)
                                     {
                                         throw new Exception("Server Error");
                                     }
                                     else if (jObject.getInt("responseStatus")== 400)
                                     {
                                         throw new Exception("Wrong User/Password");
                                     }
                                     else
                                     {
                                         throw new Exception();
                                     }
                                }
                              //pd.dismiss(); 


                        } catch (Exception e) {
                            Log.e("catch", "catch");
                             Toast toast ;
                                toast =     Toast.makeText(getApplicationContext(), e.getMessage(), 500);
                            toast.show();
                            Log.e("catch", e.getMessage());

                        }




    }
    private String md5(String in) {

        MessageDigest digest;

        try {

            digest = MessageDigest.getInstance("MD5");

            digest.reset();        

            digest.update(in.getBytes());

            byte[] a = digest.digest();

            int len = a.length;

            StringBuilder sb = new StringBuilder(len << 1);

            for (int i = 0; i < len; i++) {

                sb.append(Character.forDigit((a[i] & 0xf0) >> 4, 16));

                sb.append(Character.forDigit(a[i] & 0x0f, 16));

            }

            return sb.toString();

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

        return null;

    }
}

最佳答案

在您的代码中,您注释了 //JSONObject menuObject = jObject.getJSONObject("responseData");

在此之后,您是否获得了您提到的捕获日志“org.json.JSONObject$1 类型的 responseData 的值 null 无法转换为 JSONObject "

因为,对空值执行 getJsonObject 是不可能的。

你必须这样做。

Object menuObject = jObject.get("responseData");

if(menuObject == JSONObject.NULL)
{
 // Skip processing the response Data
}

关于android - JSON对象获取问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4635575/

相关文章:

android - 任务 ':app:compileDebugJavaWithJavac' 执行失败。错误 :(2055, 52) 错误 : ';' expected Error:(2055, 59) 错误:<标识符> 预期

android - 获取 MyFirebaseInstanceIDService 的 Activity 实例

android - 在 Java 中从 Web 读取 XML

java - 如何重新运行任务

java - Jsoup 在指定标签后开始解析还是从页面底部开始?

android - Crashlytics 启动时应用程序崩溃

android - 将应用程序可读的文件推送到 Android 设备

android - 有什么方法可以使按钮上的图像自动调整大小以适合屏幕?

Android 教育欢迎屏幕 - 蓝色圆圈突出显示文本

java - 如何创建每 10 分钟执行一次命令的 CountDownTimer