Как изменить элементы списка? - PullRequest
0 голосов
/ 21 марта 2012

Я получаю строки из HttpGet и хочу поместить их в список. Как я мог это сделать? Я нигде не могу найти никакой информации об этом. Во время движения у меня есть только некоторые данные испытаний.

Например.

"Test1"

Но я хочу, чтобы он был динамичным, из строк, которые телефон получает от HttpGet.

Спасибо.

Мой код на данный момент: (Извините за грязный код, я скоро его перепишу!)

public class ChatService extends Activity {
    /** Called when the activity is first created. */


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.chatservice);
        try {
            ContactsandIm();
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        CheckLogin();


        ListView list = (ListView) findViewById(R.id.ListView01);
        list.setClickable(true);

        final List<PhoneBook> listOfPhonebook = new ArrayList<PhoneBook>();
        listOfPhonebook.add(new PhoneBook("a", "9981728", "test@test.com"));
        listOfPhonebook
                .add(new PhoneBook("Test1", "1234455", "test1@test.com"));
        listOfPhonebook.add(new PhoneBook("Test2", "00000", "test2@test.com"));

        PhonebookAdapter adapter = new PhonebookAdapter(this, listOfPhonebook);

        list.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> arg0, View view,
                    int position, long index) {
                System.out.println("sadsfsf");
                showToast(listOfPhonebook.get(position).getName());
            }
        });

        list.setAdapter(adapter);
    }

    private void CheckLogin() {
        // TODO Auto-generated method stub
        // Create a new HttpClient and Post Header
                HttpClient httpclient = new DefaultHttpClient();

                /* login.php returns true if username and password is equal to saranga */
                HttpPost httppost = new HttpPost("http://gta5news.com/login.php");

                try {

                    // Execute HTTP Post Request
                    Log.w("HttpPost", "Execute HTTP Post Request");
                    HttpResponse response = httpclient.execute(httppost);

                    String str = inputStreamToString(response.getEntity().getContent())
                            .toString();
                    Log.w("HttpPost", str);

                    if (str.toString().equalsIgnoreCase("true")) {
                        Log.w("HttpPost", "TRUE");
                        try {Thread.sleep(250);
                        } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                        //put intent here(21/3/12); 

                    } else {
                        Log.w("HttpPost", "FALSE");

                    }

                } catch (ClientProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            private StringBuilder inputStreamToString(InputStream is) {
                String line = "";
                StringBuilder total = new StringBuilder();
                // Wrap a BufferedReader around the InputStream
                BufferedReader rd = new BufferedReader(new InputStreamReader(is));
                // Read response until the end
                try {
                    while ((line = rd.readLine()) != null) {
                        total.append(line);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                // Return full string
                return total;
            }




    private void ContactsandIm() throws URISyntaxException, ClientProtocolException, IOException {
        // TODO Auto-generated method stub
        BufferedReader in = null;
        String data = null;


        HttpClient get = new DefaultHttpClient();
        URI website = new URI("http://www.gta5news.com/test.php");
        HttpGet webget = new HttpGet();
        webget.setURI(website);
        HttpResponse response = get.execute(webget);
        Log.w("HttpPost", "Execute HTTP Post Request");
        in = new BufferedReader (new InputStreamReader(response.getEntity().getContent()));
        //now we'll return the data that the PHP set from the MySQL Database.



        // just some test code, to see if the HttpGet was working.
        if (in.equals("True")); {
            Toast.makeText(this,"yay", Toast.LENGTH_LONG).show();
        }






    }

    // end bracket for "ContactsandIm"

    private void showToast(String message) {
        Toast.makeText(this, message, Toast.LENGTH_LONG).show();
    }
}

Ответы [ 2 ]

0 голосов
/ 21 марта 2012

Насколько я понимаю, вам нужно добавлять новую запись в телефонную книгу каждый раз, когда ваш запрос Http будет выполнен успешно. Если это так, у вас есть варианты, чтобы сделать все динамично:

  1. Повторно создавайте адаптер каждый раз, когда вы получаете новую порцию данных:

    • Сделайте вашу глобальную переменную listView (чтобы она была доступна из любой функции в классе)
    • Сделайте то же самое со своим списком
    • Как только вы получили новую порцию данных - добавьте эти данные в свой список, создайте новый адаптер и установите этот адаптер на свой ListView
  2. Создание собственного адаптера с возможностью обновления ListItems:

    public class YourCustomAdapter extends BaseAdapter
    {
        private final LayoutInflater inflater;
        private ArrayList list = new ArrayList();
        private Handler uiHandler = new Handler();
    
    
    <pre><code>/*..... default set of functions from BaseAdapter ......*/
    
    public void setList(ArrayList<PhoneBook> list)
    {
        this.list = list;
    }
    
    public void addEntry(final PhoneBook entry)
    {
        uiHandler.post(new Runnable()
        {
            @Override
            public void run() 
            {
                list.add(entry);
                YourCustomAdapter.notifyDataSetChanged();
            }
        });
    }
    </code>
    }
    • обратите внимание, что в этом случае вам разрешено изменять базовый список ТОЛЬКО из потока пользовательского интерфейса

Надеюсь, это поможет

0 голосов
/ 21 марта 2012

Из кода я вижу, что PhonebookAdapter - ваш пользовательский класс адаптера. Почему бы не проанализировать http-ответ типа PhoneBook и добавить его в список iPhone Phone. Это должно показать проанализированное содержимое в listView.

...