3

私のアクティビティ Oncreate() 関数では、AsyncTaskを呼び出しています。そのPostExecute( ) で、いくつかの動的ギャラリー コントロールを作成し、 ImageAdapterL.notifyDataSetChanged();を呼び出します。. しかし、ヌルポインター例外が発生します。

Oncreate() を呼び出さずにアクティビティを更新する必要があります [Oncreate の B'coz は非同期タスクを呼び出しているだけです]。

        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home_page);

        new testAynscTask().execute();
    }
    private class testAynscTask extends AsyncTask<Void, Void, Void>{

        @Override
        protected Void doInBackground(Void... params) {
            processTogetImages();
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        CreateDynamicGallery();
            aImageAdapterL.notifyDataSetChanged();
        }
    }
public void CreateDynamicGallery(){
        CategoryGalleryLayout = (LinearLayout) findViewById(R.id.linearLayout1);
        Gallery g = new Gallery(getApplicationContext());
        GalleryLayout.addView(g,new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
            g.setSpacing(15);


        aImageAdapterL = new ImageAdapter(getApplicationContext());
        g.setAdapter(aImageAdapterL);
        g[positionP].setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(@SuppressWarnings("rawtypes") AdapterView parent, View v, int position, long id) {
                Toast.makeText(getBaseContext(), "" + position, Toast.LENGTH_SHORT).show();
            }
        });



    }

}

前もって感謝します

4

1 に答える 1

0

アダプター内の画像だけで、アクティビティを実際に更新していないように思えます。null アダプターを使用して onCreate から createDynamicGallery を呼び出すことをお勧めします (適切に作成されたアダプター ビューでは、null アダプターを空として処理する必要があります)。次に、画像を読み込み、実際のアダプター (または新しいアダプター) に画像を取り込みます。ギャラリー ビューのアダプターを実際のアダプターに設定すると、ギャラリーが更新され、すべてがうまくいくはずです。

追加の観察として、ローテーションを正しく処理するのに役立つ asynctaskloader と loadermanager の使用を検討することをお勧めします。現在のコードでは、非同期タスクの実行に時間がかかる場合、エラー (「アクティビティが破棄されました」エラーの可能性があります) が発生したり、画面の回転後に 2 つの非同期タスクが画像を読み込もうとして競合状態になったりする可能性があります。

于 2013-10-18T21:00:59.540 に答える