0

私はこのコードを実行してきonCreateました (最初にオンラインからデータを取得する必要があるため)、mainView.setAdapter行で停止し、次のデバッグステートメントに到達しません (またはそのデータをロードします)。私は何を間違っていますか?

private void loadInteractions(JSONArray interactions){
    mainView = (ListView) findViewById(R.id.list);
    myInteractionsTask.cancel(false);
    String[] interactionsArray=new String[interactions.length()];
    for(int interactionCounter=0; interactionCounter<interactions.length();interactionCounter++){
        TextView interactionView = new TextView(this);
        Log.d("Debug", "Loading Interaction #"+interactionCounter);
        try {
            Log.d("Debug", "Loading text: "+interactions.getString(interactionCounter));
            interactionsArray[interactionCounter]=interactions.getString(interactionCounter);
            Log.d("Debug", "Done loading text");
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    mainView.setAdapter(new ArrayAdapter<String>(this, R.id.list, interactionsArray));
    Log.d("Debug", "Done loading textView");

}
4

2 に答える 2

1
mainView.setAdapter(new ArrayAdapter<String>(this, R.id.list, interactionsArray));

ArrayAdapterコンストラクターの 2 番目のパラメーターはListView、それ自体の ID ではなく、個々のアイテム レイアウトである必要がありListViewます。あなたR.id.listはあなたのListViewIDであるパスしています。

android.R.layout.simple_list_item_1代わりに、アイテムごとに 1 行のテキスト レイアウトを提供するパスを試してください。

于 2012-06-10T18:24:55.843 に答える
0

私の問題は、私が投稿したコードとは実際には何の関係もないことがわかりました。問題は、私がUI要素を追加しようとしたdoInBackgroundことでAsyncTaskあり、決してそれを行うべきではありませんが、代わりにonPostExecute投稿を編集してそれを表示します. これが最終的なコードです。

class LoadInteractionsTask extends AsyncTask<String,Integer,Integer>{
    JSONArray interactions;
    boolean loadStatus=false;

    @Override
    protected Integer doInBackground(String... params) {
        // TODO Auto-generated method stub
        // TODO Auto-generated method stub
        // Create a new HttpClient and Post Header
        myLogin.cancel(false);
        HttpGet httpget = new HttpGet("http://www.example.com/device/get_module_list.php");
        Log.d("Debug", "starting loading");

        try {
            // Execute HTTP Post Request
            HttpResponse response = httpclient.execute(httpget);
            HttpEntity myentity =response.getEntity();
            Log.d("Debug", "response: "+myentity);

            String loginJSON = EntityUtils.toString( myentity );
            JSONTokener myTokener =new JSONTokener(loginJSON);
            //Log.d("Debug", "status: "+myTokener.nextValue());


            //JSONObject
            JSONObject myJSON = (JSONObject) (myTokener).nextValue();
            Log.d("Debug", "status: "+myJSON.getInt("status"));
            if(myJSON.getInt("status")==1){
                interactions=myJSON.getJSONArray("modules");
                loadStatus=true;
            }else{
                Log.d("Debug", "error: "+myJSON.getString("reason"));

            }

        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            Log.d("Debug", "caught ClientProtocolException");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            Log.d("Debug", "caught IOException: "+e.getMessage());
            e.printStackTrace();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    protected void onPostExecute(Integer result) {
        super.onPostExecute(result);
        if(loadStatus){
            loadInteractions(interactions);
        }
    }


}
于 2012-06-10T19:55:38.210 に答える