gpt4 book ai didi

java - 在 Eclipse 中调试 Android 代码的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-01 17:23:33 26 4
gpt4 key购买 nike

我刚刚开始使用 Eclipse,想知道是什么原因导致我的应用程序出现错误。我想知道他们是否是像 Visual Studio 那样的方式。

我的意思是我遇到了空指针异常,但即使在设置断点之后,我也很困惑是什么原因导致错误发生。

因为我是新手,所以大多数时候我都会运行不好或代码无法工作。我如何认识到自己的错误。有时我的代码无法正常工作,并且异常很难找出我的代码发生的真正问题。

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

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;
}

}

最佳答案

你的问题是这一行

SharedPreferences sp = getSharedPreferences(prefName, MODE_PRIVATE);

getSharedPreferences() 使用 Context,因此在 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();
}

就阅读 logcat 而言,以这个例子为例

05-18 18:29:44.160: ERROR/AndroidRuntime(2145): FATAL EXCEPTION: main
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.paad.whereami/com.paad.whereami.WhereAmI}: java.lang.NullPointerException
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): at android.os.Handler.dispatchMessage(Handler.java:99)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): at android.os.Looper.loop(Looper.java:130)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): at android.app.ActivityThread.main(ActivityThread.java:3683)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): at java.lang.reflect.Method.invokeNative(Native Method)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): at java.lang.reflect.Method.invoke(Method.java:507)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): at dalvik.system.NativeStart.main(Native Method)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): Caused by: java.lang.NullPointerException
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): at com.example.project.MainActivity.updateWithNewLocation(MainActivity.java:290)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): at com.example.project.MainActivity.onCreate(MainActivity.java:216)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)

看到 FatalException 后,查找第一行,例如 Caused by

这会告诉您您的异常(exception)情况是什么。在此示例中,为 NullPointerException。然后查找引用您的项目的第一行。它位于com.example.project.MainActivity.updateWithNewLocation(MainActivity.java:290)。这告诉我们异常发生在 MainActivity 的第 290 行,这是最好的起点。您可能必须从这里追溯到它,但这通常是您的问题所在。

我从另一个问题中获取了这个堆栈跟踪,希望没有人介意,但这应该让您对如何调试应用程序有一个大概的了解。您可能仍然不明白它发生的确切原因或地点,但这将使您更好地准备提出问题,以便您可以发布最相关的代码并顺利进行。希望这有帮助

关于java - 在 Eclipse 中调试 Android 代码的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16782558/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com