Java 在Eclipse中调试android代码的最佳方法是什么?

Java 在Eclipse中调试android代码的最佳方法是什么?,java,android,nullpointerexception,Java,Android,Nullpointerexception,我刚开始接触Eclipse,想知道是什么原因导致我的应用程序出错。我想知道他们的方式是否像VisualStudio 我的意思是,我得到了空指针异常,但即使在放置断点之后,我仍然不知道错误发生的原因 因为我大部分时间都是新手,所以我运行的代码不好或不起作用。我如何认识到我的错误。有时我的代码不起作用,很难找出代码的真正问题 有人检查代码并指导我如何找到它吗。我的意思是如何知道空指针异常发生在哪里 public class MainActivity extends Activity { S

我刚开始接触Eclipse,想知道是什么原因导致我的应用程序出错。我想知道他们的方式是否像VisualStudio

我的意思是,我得到了空指针异常,但即使在放置断点之后,我仍然不知道错误发生的原因

因为我大部分时间都是新手,所以我运行的代码不好或不起作用。我如何认识到我的错误。有时我的代码不起作用,很难找出代码的真正问题

有人检查代码并指导我如何找到它吗。我的意思是如何知道空指针异常发生在哪里

public class MainActivity extends Activity {

    Set<String> tasks = new HashSet<String>();
    final String prefName = "andorid";
    SharedPreferences sp = getSharedPreferences(prefName, MODE_PRIVATE);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SetupApp();
    }

    // / Add the task in this function
    private void SetupApp() {

        tasks.add("blah");

        if (!sp.contains("tasks")) {
            Editor edit = sp.edit();

            edit.putStringSet("tasks", tasks);

            edit.commit();
        }

    }

    public void btnClick(View view) {

        EditText etxt = (EditText) findViewById(R.id.txtTask);

        tasks.add(etxt.getText().toString());

    }

    public void UpdateUI(String TaskName) {

        final ListView listview = (ListView) findViewById(R.id.listView1);

        Set<String> tasks = sp.getStringSet("tasks", new HashSet<String>());

        @SuppressWarnings("unchecked")
        ArrayList<String> taskarr = (ArrayList<String>) tasks;

        final ArrayList<String> list = new ArrayList<String>();
        for (int i = 0; i < taskarr.size(); ++i) {
            list.add(taskarr.get(i));
        }
    }

    public void LoadTasks() {

    }

}

class StableArrayAdapter extends ArrayAdapter<String> {

    HashMap<String, Integer> mIdMap = new HashMap<String, Integer>();

    public StableArrayAdapter(Context context, int textViewResourceId,
            List<String> objects) {
        super(context, textViewResourceId, objects);
        for (int i = 0; i < objects.size(); ++i) {
            mIdMap.put(objects.get(i), i);
        }
    }

    @Override
    public long getItemId(int position) {
        String item = getItem(position);
        return mIdMap.get(item);
    }

    @Override
    public boolean hasStableIds() {
        return true;
    }

}
公共类MainActivity扩展活动{
Set tasks=new HashSet();
最后一个字符串prefName=“android”;
SharedReferences sp=getSharedReferences(prefName,MODE_PRIVATE);
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SetupApp();
}
///在此函数中添加任务
私有void SetupApp(){
任务。添加(“废话”);
如果(!sp.contains(“任务”)){
Editor edit=sp.edit();
编辑.putStringSet(“任务”,任务);
edit.commit();
}
}
公共无效BTN单击(视图){
EditText etxt=(EditText)findViewById(R.id.txtTask);
tasks.add(etxt.getText().toString());
}
public void UpdateUI(字符串TaskName){
最终ListView ListView=(ListView)findViewById(R.id.listView1);
Set tasks=sp.getStringSet(“tasks”,new HashSet());
@抑制警告(“未选中”)
ArrayList taskarr=(ArrayList)任务;
最终ArrayList=新ArrayList();
对于(int i=0;i
您的问题是这一行

SharedPreferences sp = getSharedPreferences(prefName, MODE_PRIVATE);
getSharedReferences()
使用
上下文
,因此在运行
onCreate()
之前不能调用此函数。尝试像这样更改代码

public class MainActivity extends Activity {

Set<String> tasks = new HashSet<String>();
final String prefName = "andorid";
SharedPreferences sp;  // you can declare it here

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sp = getSharedPreferences(prefName, MODE_PRIVATE);  // but don't initialize it until at least here

    SetupApp();
}
在看到
FatalException
后,查找第一行,如

这将告诉您异常是什么。在本例中,
NullPointerException
。然后查找引用项目的第一行。这里是com.example.project.MainActivity.updateWithNewLocation(MainActivity.java:290)上的
。这告诉我们异常发生在
MainActivity
的第290行,这是最好的开始位置。您可能需要从这里追溯,但这通常是您的问题所在


我从另一个问题抓取了这个stacktrace,希望没人介意,但这应该能让你大致了解如何调试你的应用程序。您可能仍然不清楚它发生的确切原因或地点,但这将更好地为您提问做好准备,这样您就可以发布最相关的代码并试一试。希望这有帮助

你的问题就在这一行

SharedPreferences sp = getSharedPreferences(prefName, MODE_PRIVATE);
getSharedReferences()
使用
上下文
,因此在运行
onCreate()
之前不能调用此函数。尝试像这样更改代码

public class MainActivity extends Activity {

Set<String> tasks = new HashSet<String>();
final String prefName = "andorid";
SharedPreferences sp;  // you can declare it here

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sp = getSharedPreferences(prefName, MODE_PRIVATE);  // but don't initialize it until at least here

    SetupApp();
}
在看到
FatalException
后,查找第一行,如

这将告诉您异常是什么。在本例中,
NullPointerException
。然后查找引用项目的第一行。这里是com.example.project.MainActivity.updateWithNewLocation(MainActivity.java:290)
上的
。这告诉我们异常发生在
MainActivity
的第290行,这是最好的开始位置。您可能需要从这里追溯,但这通常是您的问题所在


我从另一个问题抓取了这个stacktrace,希望没人介意,但这应该能让你大致了解如何调试你的应用程序。您可能仍然不清楚它发生的确切原因或地点,但这将更好地为您提问做好准备,这样您就可以发布最相关的代码并试一试。希望这有帮助

使用eclipse调试android的最佳方法是使用断点、捕获异常和使用日志cat

设置断点,就像您一直在尝试和定位错误一样

如果断点不起作用,那么您可以查看日志cat,它可能会为您提供更多信息,例如代码中发生错误的行

然后您可以尝试捕获异常:

try{
  //do some stuff
}catch(Exception e){
  Log.wtf("A terrible error occured.", e);
}

您还可以查看这篇文章,它告诉您更多的调试方法。

使用eclipse调试android的最佳方法是使用断点、捕获异常和使用日志cat

设置断点,就像您一直在尝试和定位错误一样

如果断点不起作用,那么您可以查看日志cat,它可能会为您提供更多信息,例如代码中发生错误的行

然后您可以尝试捕获异常:

try{
  //do some stuff
}catch(Exception e){
  Log.wtf("A terrible error occured.", e);
}

您也可以查看这篇文章,它告诉您更多的调试方法。

为什么不查看logcat输出,看看NPE在哪里?这是一种很难只看代码,并找出“NPE是其他的,它可能在这里或这里或这里或…”张贴您的日志,我们可以帮助您知道如何阅读它找到errorlogcat是相当可怕的,如果你问我,但这是所有你必须与之合作,除非你交换