добавление индикатора выполнения к моей функции dataCall - Android - PullRequest
0 голосов
/ 30 сентября 2011

Как добавить индикатор выполнения, когда пользователь выбирает элемент счетчика, который запускает HTTP-запрос.Я добавляю его в класс, выполняющий http-запрос (dataCall) или основное действие, в котором есть спиннер?

У меня есть класс DataCall, который при вызове выполняет http-вызов php-скрипта, которыйполучает данные из базы данных MySQL и возвращает данные в формате JSON.Этот класс вызывается после выбора элемента счетчика.Возвращенные данные добавляются к другому счетчику в том же действии.Я пытаюсь показать колесо прогресса, когда класс DataCall делает свое дело.Ниже мой код для звонка DataCall с моего MainActivity и код с DataCall.

MainActivity, которая вызывает DataCall (см. Ниже) при выборе счетчика.Когда DataCall возвращает данные, он обновляет другой счетчик новыми данными.

statespinner.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
     public void onItemSelected(AdapterView<?> parent, View view, int position,long arg3) 
     {
      int id = parent.getId();

      if (spinner1_count2 < spinner1_count1 ) {
          spinner1_count2++;  } 
         else 
         {
             city.clear();
             String item = statespinner.getSelectedItem().toString();
             String spinnerContentType = "city";
             String spinnerURL = "getStoreCity.php?state=" + item;


//CALLING DATACALL BELOW
                 String city_data =  DataCall.getJSON(spinnerURL,spinnerContentType);
             Log.d(TAG, city_data);
             String state_spinner_log = "STATE SPINNER";
             Log.d(TAG, state_spinner_log);

             JSONArray jsonArray;    
             try {

                 cityjsonArray = new JSONArray(city_data);


                 for (int i=0; i<cityjsonArray.length(); i++)
                 {   
                     String styleValue2 = cityjsonArray.getJSONArray(i).getString(0);    
                     Log.d(TAG, styleValue2);
                     city.add(styleValue2);
                     adapter2.notifyDataSetChanged();

                 }
                //

                 } catch (JSONException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
                 }




          }

     }
        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            // TODO Auto-generated method stub

        }

    });

Класс DataCall:

 public class DataCall extends Activity {
        private static final String TAG = "MyApp";


         public static String getJSON(String myUrlString, String contentType){  

                    String line = null;
                    String tag_value = null;
                    try {

                        DefaultHttpClient httpClient = new DefaultHttpClient();

                        HttpGet httpPost = new HttpGet("http://www.mywebsite.com/getdata/" + myUrlString);

                        HttpResponse httpResponse = httpClient.execute(httpPost);
                        HttpEntity httpEntity = httpResponse.getEntity();
                        line = EntityUtils.toString(httpEntity);

                    } catch (UnsupportedEncodingException e) {
                        line = "<results status=\"error\"><msg>Can't connect to server1</msg></results>";
                    } catch (MalformedURLException e) {
                        line = "<results status=\"error\"><msg>Can't connect to server2</msg></results>";
                    } catch (IOException e) {
                        line = "<results status=\"error\"><msg>Can't connect to server3</msg></results>";
                    }catch (Exception anything) {
                        //Whatever

                    }

                    return line;

            }


    }

1 Ответ

1 голос
/ 30 сентября 2011

Я думаю, что вам придется перенести этот веб-вызов в другой поток, так как это займет неизвестное количество времени для запуска и может вызвать ANR.

Если вы используете ASyncTask, он имеет встроенный механизм для обновления индикатора выполнения во время работы фонового потока.По этой ссылке есть много ценной информации

http://www.vogella.de/articles/AndroidPerformance/article.html

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

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