我有一段代码通过简单地调用一些URL来设置一些网络IP摄像机参数。 URL(以简化)以这种格式“http://mydomain.com:portnumber/setalarm.cgi”,我使用普通的HttpGet / HttpResponse机制来调用URL并获得结果状态(如果它是好的200,其他如果不好) )。 现在:由于要调用的URL是8或更多,按顺序(我用于循环),我想显示一个进度条(或简单的进度指示器),让用户知道正在执行不同的URL调用。当所有8个调用完成后,我希望显示一个新的Actity结果(OK,或KO以及KO凸轮列表)。
我在这个网站上找到了很多解决方案,但没有一个成功的解决方案(线程,进度条,对话栏,异步任务等)。要么我得到例外,要么没有显示栏,要么在完成流程之前显示新的活动。
有人可以帮忙吗?这是我现在代码的相关部分:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainlayout);
// ON button
Button myButton1 = (Button) findViewById (R.id.button1);
myButton1.setOnClickListener(new OnClickListener() {
public void onClick(final View arg0) {
intGoodCamera = 0;
intBadCamera = 0;
for (int i = 0; i<intNumCam; i++) {
System.out.println (intStartingPortNb+i);
String myurl = strIPAddress + ":" + (intStartingPortNb+i) + strSuffixSetAlarmOn;
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet(myurl);
HttpResponse response = null;
try {
response = httpClient.execute(httpGet, localContext);
System.out.println (response.getStatusLine().getStatusCode());
if (response.getStatusLine().getStatusCode() == 200)
intGoodCamera++;
else {
intBadCamera++;
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println ("OK: "+intGoodCamera + " KO: "+ intBadCamera);
Intent nextIntent = new Intent(MainActivity.this, Results.class);
MainActivity.this.startActivity(nextIntent);
}
});
.....
答案 0 :(得分:1)
只需使用AsyncTask ..
onPreExecute()
中放置 ProgressDialog 代码.. doInBackGround()
中。onPostExecute()
中的 ProgressDailog
在onPostExecute()
。简单..
答案 1 :(得分:0)
我认为你的问题是你在UI线程中放置了http请求,这是自Android 3.0以来禁止的
我认为你应该检查这个链接: httpGet Request error
答案 2 :(得分:0)
我建议阅读有关AsyncTask的内容。看看this tutorial (http://www.vogella.com/articles/AndroidPerformance/article.html#asynctask),看看你几乎要做的一个很好的例子。
答案 3 :(得分:0)
您无法在UI线程中执行超过5秒的操作。 对于那个使用Async Task
在上一个http请求完成后调用下一个http请求(因为任务正在运行Async)并更新进度条。
最好使用侦听器接口来处理异步任务完成
步骤: