2011-12-27 23 views
0

私のクラスの1つでAsyncTaskを使用していますが、onPostExecuteメソッドを使用してビューを更新できません。メインクラスでは、結果タブにタブを変更するActionBarを使用しています。クエリの結果はどこにリスト形式で表示されますか?私は安らかなサービスを使用していて、リストをサーバーから正常に取得しています。クエリの結果を表示するために、結果タブ(メインクラスにある)を更新しようとしています。これまでに成功していない、どんな助けも大変感謝します、ありがとう。AsyncTaskを使用していますが、onPostExecuteメソッドを使用してビューを更新できません。

PS。私はonPostExecuteメソッドを実行して結果タブに移動し、AsyncTaskクラスからmainのビューを更新できないだけでサーバからリストを取得します。また、私はonProgressUpdateメソッドも持っていることを言及する必要があります。 "私はログ猫に文字列を出力して、それが呼び出されていることを確認しています"。 doInBackgroundメソッドも正常に動作し、ビューを正しく更新できません。また、私は別のクラスからmainを更新しているので、リストビューとアダプタを静的にしたので、asyncTaskクラスから呼び出すことができます。これは私の考えでは理にかなっていますが、これは間違っているかもしれません。 onPostExecuteメソッドを使用します。ありがとう。

メインクラスのOnCreateメソッド:メインクラスで

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 


     bar = getActionBar(); 
     bar.addTab(bar.newTab().setText("Basic\nSearch").setTabListener(this)); 
     bar.addTab(bar.newTab().setText("Advanced\nSearch").setTabListener(this)); 
     bar.addTab(bar.newTab().setText("Results").setTabListener(this)); 
     //bar.addTab(bar.newTab().setText("Exit").setTabListener(this)); 

     bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_USE_LOGO); 
     bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     bar.setDisplayShowHomeEnabled(true); 
     // remove the activity title to make space for tabs 
     bar.setDisplayShowTitleEnabled(false); 
     bar.setDisplayUseLogoEnabled(false); 
    } 

法の結果]タブと[クエリサーバーにタブを変更します。

public void basicSubmitButton(View view) throws InterruptedException { 
     String query = myBasicEditText.getText().toString(); 
     bar.setSelectedNavigationItem(2); 
     ReadWebpageAsyncTask basicSubmission = new ReadWebpageAsyncTask(); 
     basicSubmission.query(query); 
    } 

asyncTask方法のonCreate:

public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.results); 

    } 

onPostExecute方法を:

protected void onPostExecute(String result) { 
      Hummedia.myListView = (ListView) findViewById (R.id.lv); 
      Hummedia.myListView.setTextFilterEnabled(true); 
      Hummedia.myListView.clearChoices(); 

       Hummedia.adapter = new ArrayAdapter<String>(ReadWebpageAsyncTask.this, 
         android.R.layout.simple_list_item_1, 
         mediaList); 
       //wait(); 
       Hummedia.myListView.setAdapter(Hummedia.adapter); 
     } 

、ここでそれがonPostExecuteメソッドを介して主にビューを更新しようとしたときにスタックトレース出力です:

12-26 18:21:48.916: D/AndroidRuntime(536): Shutting down VM 
12-26 18:21:48.916: W/dalvikvm(536): threadid=1: thread exiting with uncaught exception (group=0x409951f8) 
12-26 18:21:49.067: E/AndroidRuntime(536): FATAL EXCEPTION: main 
12-26 18:21:49.067: E/AndroidRuntime(536): java.lang.NullPointerException 
12-26 18:21:49.067: E/AndroidRuntime(536): at android.app.Activity.findViewById(Activity.java:1794) 
12-26 18:21:49.067: E/AndroidRuntime(536): at edu.byu.hummedia.ReadWebpageAsyncTask$DownloadWebPageTask.onPostExecute(ReadWebpageAsyncTask.java:132) 
12-26 18:21:49.067: E/AndroidRuntime(536): at edu.byu.hummedia.ReadWebpageAsyncTask$DownloadWebPageTask.onPostExecute(ReadWebpageAsyncTask.java:1) 
12-26 18:21:49.067: E/AndroidRuntime(536): at android.os.AsyncTask.finish(AsyncTask.java:602) 
12-26 18:21:49.067: E/AndroidRuntime(536): at android.os.AsyncTask.access$600(AsyncTask.java:156) 
12-26 18:21:49.067: E/AndroidRuntime(536): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) 
12-26 18:21:49.067: E/AndroidRuntime(536): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-26 18:21:49.067: E/AndroidRuntime(536): at android.os.Looper.loop(Looper.java:137) 
12-26 18:21:49.067: E/AndroidRuntime(536): at android.app.ActivityThread.main(ActivityThread.java:4340) 
12-26 18:21:49.067: E/AndroidRuntime(536): at java.lang.reflect.Method.invokeNative(Native Method) 
12-26 18:21:49.067: E/AndroidRuntime(536): at java.lang.reflect.Method.invoke(Method.java:511) 
12-26 18:21:49.067: E/AndroidRuntime(536): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
12-26 18:21:49.067: E/AndroidRuntime(536): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
12-26 18:21:49.067: E/AndroidRuntime(536): at dalvik.system.NativeStart.main(Native Method) 

答えて

0

これは、ウィンドウに添付されていない、あなたの活動によって引き起こされます。 Activity.javaの関連する行はgetWindow().findViewById(id);です。AsyncTaskを起動するボタンをクリックするとタブ表示が切り替わるので、これが原因です。

これを考慮に入れてアップデートを整理する必要があります。アクティビティにコールバックをポストするだけで呼び出すようにAsyncTaskを変更してみてください。あなたの活動では、onAttachedToWindowonDetachedFromWindowを無効にしてウィンドウの添付ファイルの状態を追跡できます。変更をただちに行うことも、接続するまで待つこともできます。

関連する問題