1

リスト ビューを満たす非同期タスクを構築しようとしています。listView を findViewBYId で設定しようとすると、次のようになります。

ListView lv = (ListView) ((View) c).findViewById(R.id.tastelist);

次のエラーが表示されます。

Cannot cast from Context to View

私の非同期タスククラス全体は次のとおりです。

public class GetTasteJSON extends AsyncTask
<String, Void, String> {

    Context c;

    public GetTasteJSON(Context context)
    {
         c = context;
    }

    @Override
    protected String doInBackground(String... arg0) {
        // TODO Auto-generated method stub
        return readJSONFeed(arg0[0]);
    }

    protected void onPostExecute(String result){

        //decode json here
        try{

            JSONObject json = new JSONObject(result);

            //acces listview
            ListView lv = (ListView) ((View) c).findViewById(R.id.tastelist);

            //make array list for beer
            final List<BeerData> beerList = new ArrayList<BeerData>();

        }
        catch(Exception e){

        }

    }

    public String readJSONFeed(String URL) {
        StringBuilder stringBuilder = new StringBuilder();
        HttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(URL);
        try {
            HttpResponse response = httpClient.execute(httpGet);
            StatusLine statusLine = response.getStatusLine();
            int statusCode = statusLine.getStatusCode();
            if (statusCode == 200) {
                HttpEntity entity = response.getEntity();
                InputStream inputStream = entity.getContent();
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(inputStream));
                String line;
                while ((line = reader.readLine()) != null) {
                    stringBuilder.append(line);
                }
                inputStream.close();
            } else {
                Log.d("JSON", "Failed to download file");
            }
        } catch (Exception e) {
            Log.d("readJSONFeed", e.getLocalizedMessage());
        }        
        return stringBuilder.toString();
    }

}
4

3 に答える 3

1

キャストを次のように変更します

ListView lv = (ListView) ((Activity) c).findViewById(R.id.tastelist);

この場合のコンテキストはあなたのアクティビティでなければなりません

于 2013-06-26T22:43:37.223 に答える
0

およびアクティビティ(この場合はコンテキスト)からのfindViewByIdの呼び出しと、ビュー(あなたがやろうとしていると私は信じています)には違いがあります。アクティビティを開始するためにインフレートしたビューが、取得したいビューの親である場合は、ビューではなく、アクティビティにキャストしてみてください。それ以外の場合は、タイプ ViewGroup のインスタンス変数を作成し、setter を使用して親ビューを渡します。

于 2013-06-26T22:45:21.253 に答える
0

コンテキストはあなたのアクティビティでなければならないので、あなたのようにビューではなくアクティビティにキャストしてください...

List アクティビティがある場合は、次のようにするだけです。

ListView lv=((ListActivity) context).getListView();
于 2013-06-27T04:41:26.663 に答える