2012-04-09 6 views
0

ListViewを表示しようとしています。findViewById(R.id.list_view); "null"を返す

私は1 AsyncTaskを起動して、私はその中に表示ListViewをしようとしていますonPostExecute()方法でいonCreate()方法では、1 activityを作成しました。ヌル受信

しかしlistViewオブジェクト..

は、以下のコードです。

protected void onPostExecute(KpiResponseObject kpiReportResponse) { 
    ListView listView; 
    listView = (ListView) findViewById(R.id.list_view); 
} 

ここではlistViewオブジェクトにnullを受け取ります。

私はこれがcontextの問題だと思っていますが、正確には何かを理解できません。

+0

あなたの 'AsyncTask'は内部クラスでなければならないので、アクティビティ、アクティビティは' R.id.list_view'ビューを持ち、アクティビティは 'setContentView'メソッドを使用しているかどうか? – idiottiger

答えて

2

onCreatesetContentViewがありますか?ListViewlist_viewがXMLで定義されていますか?

1

setContentView()に配置するレイアウトには、IDがlist_viewのビューはありません。

1

@brigこれはほぼ100%コンテキストの問題です。上のビューの1つからfindViewByIDを呼び出す必要があります。簡単な解決策は、このasynctaskにコンテキストを渡すことです(これは、ある種のasynctaskであると仮定しています)。コンストラクタでは、あなたが

protected void onPostExecute(KpiResponseObject kpiReportResponse) { 
    ListView listView; 
    listView = (ListView) mContext.findViewById(R.id.list_view); 
} 
+0

なぜ、UIスレッドからonPostExecuteが呼び出されるのですか? AsyncTaskがActivityにネストされている場合、Activityのコンテキストにアクセスできます。 –

+0

@Alexしかし、内部クラス定義でなくても、同じコンテキストに直接アクセスする必要があることを意味しますか? – MikeIsrael

+0

** MyActivityを使用してコンテキストにアクセスすることができます。**また – noob

1

は何文脈から2あなたがNULL値の1を得ることができた理由定義されていないされてsetContentView(XML)と第二があります呼び出しに続いmemeber

private Context mContext; 

public myAsync(Context context){ 
    mContext = context; 
} 

を設定あなたのAsynctaskを呼び出します。これを確認してください。

関連する問題