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