Java 将进度条添加到我的dataCall函数-Android

Java 将进度条添加到我的dataCall函数-Android,java,android,progress-bar,Java,Android,Progress Bar,当用户选择触发http请求的微调器项时,如何添加进度条。我是将它添加到执行http请求(dataCall)的类中,还是添加到包含微调器的主活动中 我有一个类DataCall,当调用该类时,它会对从MySQL数据库获取数据并以JSON格式返回数据的php脚本执行http调用。选择微调器项后调用此类。返回的数据将添加到同一活动中的另一个微调器。我试图在类DataCall执行其任务时显示进度轮。下面是从myMainActivity调用DataCall的代码,以及从DataCall调用的代码 main活

当用户选择触发http请求的微调器项时,如何添加进度条。我是将它添加到执行http请求(dataCall)的类中,还是添加到包含微调器的主活动中

我有一个类
DataCall
,当调用该类时,它会对从MySQL数据库获取数据并以JSON格式返回数据的php脚本执行http调用。选择微调器项后调用此类。返回的数据将添加到同一活动中的另一个微调器。我试图在类
DataCall
执行其任务时显示进度轮。下面是从my
MainActivity
调用
DataCall
的代码,以及从
DataCall
调用的代码

main活动,在选择微调器时调用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

        }

    });
statespinner.setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长arg3)
{
int id=parent.getId();
if(喷丝头1\u计数2<喷丝头1\u计数1){
喷丝头1_count2++}
其他的
{
城市。清除();
String item=statespinner.getSelectedItem().toString();
字符串喷丝头ContentType=“城市”;
String spinnerURL=“getStoreCity.php?state=“+项;
//呼叫下面的数据呼叫
字符串city_data=DataCall.getJSON(spinnerURL,spinnerContentType);
Log.d(标签、城市数据);
字符串状态\u微调器\u log=“状态微调器”;
Log.d(标记、状态、微调器、日志);
JSONArray JSONArray;
试一试{
cityjsonArray=新JSONArray(城市数据);

对于(int i=0;i我认为您必须将此web调用移动到另一个线程,因为它将花费未知的时间来运行,并可能导致ANR

如果您使用ASyncTask,它有一个内置机制,用于在后台线程运行时更新进度条


希望这能有所帮助,m

谢谢,我将看一看链接+1,这样我就不必做太多其他的事情,然后将我的http请求包装到ASyncTask类中的DataCall中。我最近一直在使用ASyncTask。正如您所说,您需要做的就是将http请求代码包装到doInBackground方法中。如果您正确定义了类,请使用该方法将返回字符串(行),该字符串将是onPostExecute的参数之一。或者您可以使datacall类扩展ASyncTask。
 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;

            }


    }