1
我有一个ListView列出了一个项目列表(项目名称)。此ListView由AsyncTask初始化。这个AsyncTask在活动开始时被调用。当我尝试回到父活动时的意图问题
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.projects);
portal = LoginActivity.getPortal();
activity = this;
viewListProjects = (ListView)findViewById(R.projects.list);
create = (Button)findViewById(R.projects.create);
listItem = new ArrayList<HashMap<String, String>>();
this.currentItemClicked = null;
adapter = new SimpleAdapter(
this.getBaseContext(),
listItem,
R.layout.list_projects_item,
new String[] {"title", "date"},
new int[] {R.list_projects_item.title, R.list_projects_item.date}
);
viewListProjects.setAdapter(adapter);
viewListProjects.setOnItemClickListener(itemListener);
create.setOnClickListener(createListener);
String message = "Loading...";
Toast.makeText (this, message, Toast.LENGTH_SHORT).show();
CAsyncTask1 task = new CAsyncTask1();
task.execute();
}
private class CAsyncTask1 extends AsyncTask<Void, Void, Void> {
protected Void doInBackground (Void... unused) {
new Thread() {
public void run() {
listProjects = portal.getAllProjects();
activity.runOnUiThread (new Runnable() {
public void run() {
if(listProjects == null){
Toast.makeText(getBaseContext(), "Connection Failed!", Toast.LENGTH_SHORT).show();
activity.finish();
}
else{
HashMap<String, String> map = new HashMap<String, String>();
for(Info info : listProjects){
map.put("title", info.getName());
map.put("date", info.getCreation().toString());
listItem.add(map);
adapter.notifyDataSetChanged();
}
}
} // run();
});
} // run();
}.start();
return null;
} // doInBackground();
protected void onPostExecute (final Void unused) {
String message = "Project list updated!";
Toast.makeText (activity, message, Toast.LENGTH_SHORT).show();
} // onPostExecute();
} // CAsyncTask();
我创建按钮点击创建一个新的项目
private OnClickListener createListener = new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ProjectsActivity.this, NewProjectActivity.class);
startActivity(intent);
}
};
这里,使创建一个新项目的NewProjectActivity:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.new_project);
portal = LoginActivity.getPortal();
name = (EditText) findViewById(R.new_project.name);
cancel = (Button) findViewById(R.new_project.cancel);
create = (Button) findViewById(R.new_project.create);
cancel.setOnClickListener(cancelListener);
create.setOnClickListener(createListener);
}
private OnClickListener createListener = new OnClickListener() {
@Override
public void onClick(View v) {
if(name.getText().toString() != ""){
Project project = new Project();
Info info = new Info(name.getText().toString());
project.setInfos(info);
portal.createProject(project);
Intent intent = new Intent(NewProjectActivity.this, ProjectsActivity.class);
startActivity(intent);
}
else{
Toast.makeText(getBaseContext(), "Please give a name to your project.", Toast.LENGTH_SHORT).show();
}
}
};
当我打电话意向意图=新的意图(NewProjectActivity.this,ProjectsActivity.class),我得到一个例外:
01-26 03:23:23.493: E/AndroidRuntime(22440): FATAL EXCEPTION: main
01-26 03:23:23.493: E/AndroidRuntime(22440): java.lang.NullPointerException
01-26 03:23:23.493: E/AndroidRuntime(22440): at org.esir.android.ProjectsActivity$CAsyncTask1$1$1.run(ProjectsActivity.java:189)
01-26 03:23:23.493: E/AndroidRuntime(22440): at android.os.Handler.handleCallback(Handler.java:587)
01-26 03:23:23.493: E/AndroidRuntime(22440): at android.os.Handler.dispatchMessage(Handler.java:92)
01-26 03:23:23.493: E/AndroidRuntime(22440): at android.os.Looper.loop(Looper.java:130)
01-26 03:23:23.493: E/AndroidRuntime(22440): at android.app.ActivityThread.main(ActivityThread.java:3687)
01-26 03:23:23.493: E/AndroidRuntime(22440): at java.lang.reflect.Method.invokeNative(Native Method)
01-26 03:23:23.493: E/AndroidRuntime(22440): at java.lang.reflect.Method.invoke(Method.java:507)
01-26 03:23:23.493: E/AndroidRuntime(22440): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
01-26 03:23:23.493: E/AndroidRuntime(22440): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
01-26 03:23:23.493: E/AndroidRuntime(22440): at dalvik.system.NativeStart.main(Native Method)
我试图找到一个解决方案2周...所以,请帮助我。
您是否在manifest.xml文件中声明了NewProjectActivity? – ghostbust555
另外在AsyncTask的另一个线程内部创建一个新线程肯定不被推荐 – ghostbust555
Logcat显示'ProjectsActivity.java:189',所以错误发生在189行。哪一行'ProjectsActivity'是189行?基于你的Logcat,异常与意图无关,而且它实际上在'ProjectsActivity'中的'AsyncTask'中。 – Jakar