Java Try/Catch/Finally语句中出现空指针异常

Java Try/Catch/Finally语句中出现空指针异常,java,android,Java,Android,如果未找到保存的首选项,我将尝试显示首选项屏幕。但我似乎遇到了一个问题,因为我的应用程序由于空指针异常而崩溃 我当前尝试使用的代码 public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInst

如果未找到保存的首选项,我将尝试显示首选项屏幕。但我似乎遇到了一个问题,因为我的应用程序由于空指针异常而崩溃

我当前尝试使用的代码

public class MainActivity extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    try {
        SharedPreferences sharedPrefs = PreferenceManager
                .getDefaultSharedPreferences(this);
    } catch (Exception e) {
        // Preferences
        Intent prefsIntent = new Intent(MainActivity.this,
                Preferences.class);
        startActivity(prefsIntent);
    } finally {
        Intent loginIntent = new Intent(MainActivity.this,
                LoginForm.class);
        startActivity(loginIntent);
    }
  }

}
编辑:

这是我从调试控制台得到的

Java中的第24行是

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
编辑2:

这是整个LoginForm,调试控制台会说这是一个错误

package com.smashedbits.livestreams;

import java.util.HashMap;
import java.util.Map;

import com.androidquery.AQuery;
import com.androidquery.callback.AjaxCallback;
import com.androidquery.callback.AjaxStatus;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class LoginForm extends Activity {

public AQuery aq;

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(LoginForm.this);
boolean autoLogin = sharedPrefs.getBoolean("remember_login", false);

EditText eUsername = (EditText) findViewById(R.id.usernameField);
EditText ePassword = (EditText) findViewById(R.id.passwordField);

@Override
public void onBackPressed() {
    super.onBackPressed();
    // return;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);

    aq = new AQuery(this);

    // Views
    final Button prefsButton = (Button) findViewById(R.id.prefsButton);
    final Button loginButton = (Button) findViewById(R.id.loginButton);

    // Check for saved data
    String usrn = sharedPrefs.getString("usr", "NULL");
    String pswd = sharedPrefs.getString("pwd", "NULL");
    if (autoLogin == true & usrn != "NULL") {
        eUsername.setText(usrn);
        ePassword.setText(pswd);
    }

    // Preferences
    prefsButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            Intent prefsIntent = new Intent(LoginForm.this,
                    Preferences.class);
            startActivity(prefsIntent);
        }
    });

    // Login
    loginButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            ls_login();
        }
    });

}

public void ls_login() {

      boolean autoLogin = sharedPrefs.getBoolean("remember_login", false);

      if (autoLogin == true) { saveLogin(); }

    String url = "http://{redacted}";
    EditText eUsername = (EditText) findViewById(R.id.usernameField);
    EditText ePassword = (EditText) findViewById(R.id.passwordField);

    Map<String, Object> params = new HashMap<String, Object>();
    params.put("log", eUsername.getText().toString());
    params.put("pwd", ePassword.getText().toString());
    params.put("rememberme", "forever");
    params.put("wp-submit", "Log In");
    params.put("redirect_to", "{redacted}");
    params.put("testcookie", "1");

    aq.ajax(url, params, String.class, new AjaxCallback<String>() {

        @Override
        public void callback(String url, String html, AjaxStatus status) {

            if (html.contains("LOG OUT")) {
                Intent guideIntent = new Intent(LoginForm.this,
                        ChannelGuide.class);
                startActivity(guideIntent);
            }

        }
    });
}

private void saveLogin() {
    SharedPreferences.Editor editor = sharedPrefs.edit();

    editor.putString("usr", eUsername.getText().toString());
    editor.putString("pwd", ePassword.getText().toString());

    editor.commit();
}
}
package com.smashedbits.livestreams;
导入java.util.HashMap;
导入java.util.Map;
导入com.androidquery.AQuery;
导入com.androidquery.callback.AjaxCallback;
导入com.androidquery.callback.AjaxStatus;
导入android.app.Activity;
导入android.content.Intent;
导入android.content.SharedReferences;
导入android.os.Bundle;
导入android.preference.PreferenceManager;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.Button;
导入android.widget.EditText;
公共类LoginForm扩展活动{
公共饮水机;
SharedReferences SharedReferences=PreferenceManager.GetDefaultSharedReferences(LoginForm.this);
boolean autoLogin=sharedPrefs.getBoolean(“记住登录”,false);
EditText eUsername=(EditText)findViewById(R.id.usernameField);
EditText ePassword=(EditText)findViewById(R.id.passwordField);
@凌驾
public void onBackPressed(){
super.onBackPressed();
//返回;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
aq=新水道(本);
//观点
最终按钮prefsButton=(按钮)findViewById(R.id.prefsButton);
最终按钮loginButton=(按钮)findViewById(R.id.loginButton);
//检查保存的数据
字符串usrn=sharedPrefs.getString(“usr”,“NULL”);
String pswd=sharedPrefs.getString(“pwd”、“NULL”);
如果(autoLogin==true&usrn!=“NULL”){
eUsername.setText(usrn);
ePassword.setText(pswd);
}
//偏好
setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
意向预签署=新意向(LoginForm.this,
偏好(类别);
起始触感(预烧结);
}
});
//登录
setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
ls_login();
}
});
}
公共无效ls_登录(){
boolean autoLogin=sharedPrefs.getBoolean(“记住登录”,false);
如果(autoLogin==true){saveLogin();}
字符串url=“http://{redact}”;
EditText eUsername=(EditText)findViewById(R.id.usernameField);
EditText ePassword=(EditText)findViewById(R.id.passwordField);
Map params=新的HashMap();
put(“log”,eUsername.getText().toString());
参数put(“pwd”,ePassword.getText().toString());
参数put(“记住”、“永远”);
参数put(“wp提交”、“登录”);
参数put(“重定向到”,“{redacted}”);
参数put(“testcookie”,“1”);
ajax(url、params、String.class、新的AjaxCallback(){
@凌驾
公共无效回调(字符串url、字符串html、AjaxStatus状态){
if(html.contains(“注销”)){
意向指南意向=新意向(LoginForm.this,
课程指南);
星触觉(引导意图);
}
}
});
}
私有void saveLogin(){
SharedReferences.Editor=SharedRefers.edit();
putString(“usr”,eUsername.getText().toString());
putString(“pwd”,ePassword.getText().toString());
commit();
}
}

如果没有堆栈跟踪,我的猜测可能是您的捕获或最终是原因。无论何时将逻辑放入catch/finally中,都有再次抛出错误的风险,从而否定捕获的异常。您始终可以尝试将catch/finally块包装在一个try/catch中,而这个try/catch不起任何作用(或者肯定会导致另一个错误)


您的错误很可能来自更新意图、访问用于更新意图的参数之一(MainActivity.this、LoginForm.class)或来自startActivity(LoginEnt)。这些都是我至少要查看的地方。

我发现我只能在活动启动后声明变量,然后在oncreate下分配它们。

请添加显示
NullPointerException
的错误消息,并指出发生异常的代码行。堆栈跟踪是什么样子的?请始终提供您的logcat跟踪错误。代码看起来很奇怪,代码的逻辑是什么?@Alex我正在尝试检查我以前是否保存过数据,如果没有,然后启动首选项意图,否则,如果我这样做了,我想启动表单的登录意图。我在哪里可以找到堆栈跟踪?这是我第一次真正尝试进入Java。@mike,我不确定。这不是我的语言,但它是一个一般的编程问题。很抱歉,您可能无法使用任何调试器吗?只需从EclipseLogcat窗口发布logcat输出