Java 简单登录应用程序中出现NullException错误

Java 简单登录应用程序中出现NullException错误,java,android,Java,Android,我正在用android做一个简单的日志系统。我正在关注这一点。在测试我的应用程序时,我不断收到NullException错误。如果(json.getString(KEY_SUCCESS)!=null)位于下面的LoginScreensActivity中,则此错误位于这一行。我不知道为什么json是空的。请帮帮我,我哪里出错了 这是我的密码 单击登录按钮时触发的函数。这是LoginScreensActivity.java类 btnLogin.setOnClickListener(new View.

我正在用android做一个简单的日志系统。我正在关注这一点。在测试我的应用程序时,我不断收到
NullException错误
。如果(json.getString(KEY_SUCCESS)!=null)位于下面的
LoginScreensActivity
中,则此错误位于这一行。我不知道为什么json是空的。请帮帮我,我哪里出错了

这是我的密码

单击登录按钮时触发的函数。这是LoginScreensActivity.java类

btnLogin.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            String email = inputEmail.getText().toString();
            String password = inputPassword.getText().toString();
            UserFunctions userFunction = new UserFunctions();
            JSONObject json = userFunction.loginUser(email,password);

            try {
                if(json.getString(KEY_SUCCESS) != null) {
                    loginErrorMsg.setText("");
                    String res = json.getString(KEY_SUCCESS);
                    if(Integer.parseInt(res) == 1) {
                        Intent dashboard = new Intent(getApplicationContext(), DashboardActivity.class);

                        // Close all views before launching Dashboard
                        dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(dashboard);

                        // Close Login Screen
                        finish();
                    }
                } else {
                    Toast.makeText(getBaseContext(), "Login failed", Toast.LENGTH_LONG).show();
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    });
在上述代码中触发的登录用户功能

public JSONObject loginUser(String email, String password) {
    //Toast.makeText(context, "loginUser function", Toast.LENGTH_LONG).show();
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", login_tag));
    params.add(new BasicNameValuePair("email", email));
    params.add(new BasicNameValuePair("password", password));

    JSONObject json = jsonParser.getJSONFromUrl(loginUrl, params);
    //Log.e("JSON", json.toString());
    //Log.d("TAG", json.toString());
    return json;
}
更新

添加
if(json!=null&&json.getString(KEY_SUCCESS)!=null){
后,我得到以下日志

05-26 20:44:46.243: W/System.err(32680): java.net.UnknownHostException: zafarsaleem.info
05-26 20:44:46.243: W/System.err(32680):    at java.net.InetAddress.lookupHostByName(InetAddress.java:506)
05-26 20:44:46.243: W/System.err(32680):    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:294)
05-26 20:44:46.243: W/System.err(32680):    at java.net.InetAddress.getAllByName(InetAddress.java:256)
05-26 20:44:46.248: W/System.err(32680):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136)
05-26 20:44:46.248: W/System.err(32680):    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
05-26 20:44:46.248: W/System.err(32680):    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
05-26 20:44:46.248: W/System.err(32680):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:428)
05-26 20:44:46.248: W/System.err(32680):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
05-26 20:44:46.248: W/System.err(32680):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
05-26 20:44:46.248: W/System.err(32680):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
05-26 20:44:46.248: W/System.err(32680):    at library.JSONParser.getJSONFromUrl(JSONParser.java:38)
05-26 20:44:46.248: W/System.err(32680):    at library.UserFunctions.loginUser(UserFunctions.java:37)
05-26 20:44:46.248: W/System.err(32680):    at com.zafar.loginscreens.LoginScreensActivity$1.onClick(LoginScreensActivity.java:49)
05-26 20:44:46.248: W/System.err(32680):    at android.view.View.performClick(View.java:2538)
05-26 20:44:46.248: W/System.err(32680):    at android.view.View$PerformClick.run(View.java:9152)
05-26 20:44:46.248: W/System.err(32680):    at android.os.Handler.handleCallback(Handler.java:587)
05-26 20:44:46.248: W/System.err(32680):    at android.os.Handler.dispatchMessage(Handler.java:92)
05-26 20:44:46.248: W/System.err(32680):    at android.os.Looper.loop(Looper.java:130)
05-26 20:44:46.248: W/System.err(32680):    at android.app.ActivityThread.main(ActivityThread.java:3691)
05-26 20:44:46.248: W/System.err(32680):    at java.lang.reflect.Method.invokeNative(Native Method)
05-26 20:44:46.248: W/System.err(32680):    at java.lang.reflect.Method.invoke(Method.java:507)
05-26 20:44:46.248: W/System.err(32680):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
05-26 20:44:46.248: W/System.err(32680):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
05-26 20:44:46.248: W/System.err(32680):    at dalvik.system.NativeStart.main(Native Method)
05-26 20:44:46.248: E/Buffer Error(32680): Error converting result java.lang.NullPointerException
05-26 20:44:46.248: E/JSON Parser(32680): Error parsing data org.json.JSONException: End of input at character 0 of 

问题的根本原因是未知的后异常,
email
EditText似乎没有链接到有效的URL,该URL为
json
返回空值,从而导致NullPointerException

您在
电子邮件中输入的内容是什么

添加

为了明确起见,教程代码:

if(json.getString(KEY_SUCCESS) != null) {
仅检查从getString()返回的字符串是否为null。在您的情况下,
json
为null,因此需要进行如下测试:

if(json != null && json.getString(KEY_SUCCESS) != null) {
检测空指针并优雅地退出应用程序

添加2

正如用户功能类所述,如果服务器在线托管,则需要更改
用户功能类
中的以下代码行:

private static String loginURL = "http://10.0.2.2/ah_login_api/";
private static String registerURL = "http://10.0.2.2/ah_login_api/";
如果遇到堆栈溢出,可以尝试以下操作:

private static String loginURL = "http://www.stackoverflow.com/ah_login_api/";
private static String registerURL = "http://www.stackoverflow.com/ah_login_api/";

但是您不是堆栈溢出,当然,您需要将这些URL指向您的服务器和路径。

很简单,似乎是
userFunction.logiuser(电子邮件、密码);
返回null。您需要通过分析该方法找出原因。什么是loginUrl?我试图找到它,但找不到任何问题。可以告诉我如何分析它吗?在调用
新jSONObject(json)之前,尝试添加调试语句以显示
json
的值
。你到处都会遇到异常……试着从简单开始,一步一步地让小部分代码正常工作。当你尝试连接到url时,会出现异常,这会导致
is
为空。因此……当你尝试处理
is
时,会引发另一个异常。首先确保你可以连接在进一步操作之前,请访问您的url。在发布10GB代码和错误日志之前,您应该进行彻底的调试:p将代码分解成小块,并让它们一步一步地工作。不要害怕使用调试器或添加调试语句。在进一步操作之前,首先确保您可以连接到您的url。这是一个很长的教程,看起来不错但是有很多地方可能出错。这里是我最好的猜测:从“用户函数类”部分开始,确保您在正确的环境(本地或外部)中进行测试。我的JSONParser类可以吗?我的意思是它有什么问题吗?或者它应该是这样工作的吗?如果你复制了确切的教程,我打赌这些类是可以的。问题只是链接到托管PHP代码的服务器的URL。你需要将它指向正确的地址。但是我不知道你是如何设置服务器的,并且没有很好的服务器无论如何…请看我的更新。我得到了不同的日志后,如果你提到的声明。我在我的网站上使用一个在线服务器。
private static String loginURL = "http://10.0.2.2/ah_login_api/";
private static String registerURL = "http://10.0.2.2/ah_login_api/";
private static String loginURL = "http://www.stackoverflow.com/ah_login_api/";
private static String registerURL = "http://www.stackoverflow.com/ah_login_api/";