gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:43:27 25 4
gpt4 key购买 nike

当用户选择触发 http 请求的微调项目时,如何添加进度栏。我是否将其添加到执行 http 请求 (dataCall) 的类或包含微调器的主要 Activity 中?

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

选择微调器时调用 DataCall(见下文)的 MainActivity。当 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

}

});

数据调用类:

 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;

}


}

最佳答案

我认为您必须将此 Web 调用移至不同的线程,因为它将花费未知的运行时间并可能导致 ANR。

如果您使用 ASyncTask,它有一个内置机制,可以在后台线程运行时更新进度条。此链接有很多有值(value)的信息

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

希望这有帮助,m

关于java - 将进度条添加到我的 dataCall 函数 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7605176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com