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