2012-01-26 53 views
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周...所以,请帮助我。

+0

您是否在manifest.xml文件中声明了NewProjectActivity? – ghostbust555

+0

另外在AsyncTask的另一个线程内部创建一个新线程肯定不被推荐 – ghostbust555

+0

Logcat显示'ProjectsActivity.java:189',所以错误发生在189行。哪一行'ProjectsActivity'是189行?基于你的Logcat,异常与意图无关,而且它实际上在'ProjectsActivity'中的'AsyncTask'中。 – Jakar

回答

0

我觉得 activity.runOnUiThread(新的Runnable(){

此行的活动必须为空。

你可以使用处理器或者选择一个视图,并张贴,而不是活动实例可运行。

相关问题