Android - правильное обновление многопоточности / пользовательского интерфейса - PullRequest
1 голос
/ 14 марта 2012

У меня есть приложение для доступа к сети. Я решил использовать Spring Android в качестве RestAPI, и с помощью Thread эта простая демонстрация работала. Мой вопрос: как мне изменить его на заполнение фактического ListView, а не просто записывать выходные данные объекта? Некоторые другие вопросы привели меня к мысли, что AsyncTask может быть ответом, но я все еще немного озадачен тем, как я обновляю пользовательский интерфейс, так как я понимаю, что другие потоки не могут его коснуться. 1004 *

Вот что я имею сейчас, за исключением функции, которая создает RestTemplate и делает запрос, так как я считаю, что это не имеет значения:

  public void onCreate( Bundle savedInstanceState )
  {
    super.onCreate( savedInstanceState );

    new Thread( new Runnable() {
      public void run()
      {
        // create a RestTemplate. This is used to communicate with the server.
        RestTemplate restTemplate = getRestTemplate();

        String url = "http://192.168.2.14:8888/";

        JSONData[] jsonData = restTemplate.getForObject( url, JSONData[].class );

        for( JSONData d : jsonData )
        {
          Log.d( "TEST", d.getName() + " " + d.getId() );
        }
      }
    } ).start();

    setContentView( R.layout.main );
  }

Ответы [ 2 ]

4 голосов
/ 14 марта 2012

Если вы хотите изменить пользовательский интерфейс из другого потока, вы можете использовать Handler или Activity.runOnUiThread ().

2 голосов
/ 14 марта 2012

Есть несколько опций, перечисленных в очень хорошей статье (Android) Безболезненная нить . AsyncTask - это один из вариантов, и он, кажется, соответствует вашим потребностям, и существует несколько его методов, которые выполняются в потоке пользовательского интерфейса, например onPreExecute, onPostExecute и onProgressUpdate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...