进程对话框不显示在应用程序上



我想从服务器到客户端的加载信息发票。但是在加载过程中,不显示进程对话框,所以我不知道加载何时完成。你可以帮我吗?或者有没有办法在加载过程中显示对话框,请指导我!

代码调用网址

public class CallUrl extends AsyncTask<String, Integer, String> {
public static final int POST_TASK = 1;
public static final int GET_TASK = 2;         
private static final String TAG = "WebServiceTask";
// thời gian chờ của một kết nối, tính theo milliseconds (waiting to connect)
private static final int CONN_TIMEOUT = 3000; 
// thời gian chờ của một socket, tính bằng milliseconds (waiting for data)
private static final int SOCKET_TIMEOUT = 5000;   
private int taskType = GET_TASK;
private Context mContext = null;
private String processMessage = "Processing...";
private ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
private ProgressDialog pDlg = null;
//Khởi tạo
public CallUrl(int taskType, Context mContext, String processMessage) {
this.taskType = taskType;
this.mContext = mContext;
this.processMessage = processMessage;
}
@Override
protected void onPostExecute(String result) {
pDlg.dismiss();
}
//thêm thông tin cần thiết để gửi lên server 
public void addNameValuePair(String name, String value) {
params.add(new BasicNameValuePair(name, value));
}
//Hiển thị dialog trong quá trình load data
private void showProgressDialog() {
pDlg = new ProgressDialog(mContext);
pDlg.setMessage(processMessage);
pDlg.setProgressDrawable(mContext.getWallpaper());
pDlg.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pDlg.setCancelable(false);
pDlg.show();
}
@Override
protected void onPreExecute() {
showProgressDialog();
}
//kết nối đến server thông url
protected String doInBackground(String... urls) {
String url = urls[0];
String result = "";
HttpResponse response = doResponse(url);
if (response == null) {
return result;
} else {
try {
result = inputStreamToString(response.getEntity().getContent());
} catch (IllegalStateException e) {
Log.e(TAG, e.getLocalizedMessage(), e);
} catch (IOException e) {
Log.e(TAG, e.getLocalizedMessage(), e);
}
}
return result;
}
// khởi tạo socket và kết nối
private HttpParams getHttpParams() {
HttpParams htpp = new BasicHttpParams();   
HttpConnectionParams.setConnectionTimeout(htpp, CONN_TIMEOUT);
HttpConnectionParams.setSoTimeout(htpp, SOCKET_TIMEOUT); 
return htpp;
}
//thao tác xử lý khi kết nối đến server 
private HttpResponse doResponse(String url) {
HttpClient httpclient = new DefaultHttpClient(getHttpParams());
HttpResponse response = null;
try {
switch (taskType) {
case POST_TASK:
HttpPost httppost = new HttpPost(url);
// Add parameters
httppost.setEntity(new UrlEncodedFormEntity(params));
response = httpclient.execute(httppost);
break;
case GET_TASK:
HttpGet httpget = new HttpGet(url);
response = httpclient.execute(httpget);
break;
}
} catch (Exception e) {
Log.e(TAG, e.getLocalizedMessage(), e);
}
return response;
}
//Chuyển thông tin nhận về thành dạng chuỗi
private String inputStreamToString(InputStream is) {
String line = "";
StringBuilder total = new StringBuilder();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
try {
// đọc thông tin nhận được cho đến khi kết thúc
while ((line = rd.readLine()) != null) {
total.append(line);
}
} catch (IOException e) {
Log.e(TAG, e.getLocalizedMessage(), e);
}
// Trả về giá trị chuỗi đầy đủ
return total.toString();
}
}

代码主

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.invoice);
doTimerTask();
}
public void doTimerTask() {
TimerTask mTimerTask;
Timer t = new Timer();
final Handler handler = new Handler();
mTimerTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
testNetwork();
Log.d("TIMER", "TimerTask run");
}
});
}
};
// public void schedule (TimerTask task, long delay, long period)
t.schedule(mTimerTask, 500, 300000); //
}
public void testNetwork()
{
// Kiểm tra kết nối đến server
TestConnectionNew test = new TestConnectionNew();
try {
String recieve = test.execute("http://longvansolution.tk/monthlytarget.php").get();
if (recieve.equalsIgnoreCase("true") && isNetworkAvailable() == true)
{
loaddata();
}
else if (recieve.equalsIgnoreCase("false") || isNetworkAvailable() == false)
{
String mess = "Không thể kết nối đến server hoặc thiết bị chưa có kết nối mạng!";
Toast.makeText(Invoice.this, mess, Toast.LENGTH_SHORT).show();
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
public void workoffline()
{
clearArray();
try {
mDb.openDB();
Cursor mCursor = mDb.getAllInvoice(IDDelivery);
if (mCursor.moveToFirst()) {
do {
codeInvoiceArray.add(mCursor.getString(1));
nameArray.add(mCursor.getString(2));
phonenumberArray.add(mCursor.getString(3));
addressArray.add(mCursor.getString(4));
urlArray.add(mCursor.getString(5));
} while (mCursor.moveToNext());
loaddatalistview();
}
mDb.closeDB();
} catch (Exception e) {
e.printStackTrace();
}
}
// lấy dữ liệu từ server về thiết bị
public void loaddata()
{
String phonenumber, name, address, url, code;
JSONArray jArray;
try
{
clearArray();
String sampleURL = SERVICE_URL + "/monthlytarget.php";
CallUrl wst = new CallUrl(CallUrl.GET_TASK, this, "Lấy thông tin hóa đơn...");
String result = wst.execute(new String[] {
sampleURL
}).get();
if (result.equalsIgnoreCase(""))
{
notification("Hôm nay không còn gì để giao!");
}
else
{
JSONObject json_data = null;
JSONObject jsonObject = new JSONObject(result);
jArray = jsonObject.getJSONArray("Orders");
// Mở kết nối đến database
mDb.openDB();
// sử dụng json lấy các giá trị thông qua các key
// gán nó vào các mảng tương ứng
for (int i = 0; i < jArray.length(); i++) {
json_data = jArray.getJSONObject(i);
// Lây thông tin theo mã id của người giao hàng
if (json_data.getString("DeliveryId").equalsIgnoreCase(IDDelivery))
{
phonenumber = json_data.getString("PhoneNumber");
address = json_data.getString("Address");
name = json_data.getString("CustomerName");
url = json_data.getString("Url");
code = json_data.getString("CodeInvoice");
save(code, url);
// Kiểm tra mã hóa đơn này đã có trong database chưa
// nếu chưa sẽ thêm data vào databse
// nếu đã có rồi sẽ cập nhật lại thông tin thông qua mã
// hóa đơn
if (mDb.test(code) == true)
{
mDb.insert(code, name, phonenumber, address, url, "PACKED",
IDDelivery);
}
else
{
mDb.editAll(code, name, phonenumber, address, url, IDDelivery, "PACKED");
}
}
}
// Thực hiện xong, đóng kết nối
mDb.closeDB();
}
} catch (Exception e)
{
e.printStackTrace();
}
// Hiển thị thông tin nhận được lên listview
workoffline();
}

这里

String sampleURL = SERVICE_URL + "/monthlytarget.php";
CallUrl wst = new CallUrl(CallUrl.GET_TASK, this, "Lấy thông tin hóa đơn...");
String result = wst.execute(new String[] {
sampleURL
}).get();    //<<<<<<<<<<you are using execute().get()

您正在使用 AsyncTask.get() 从 AsyncTask 获取数据CallUrl因为get()方法阻止执行 UI 线程,直到结果不从AsyncTask检索,如文档所说:

如有必要,等待计算完成,然后检索 它的结果。

因此,为避免阻塞UI线程并显示警报框,您需要执行CallUrl为:

String sampleURL = SERVICE_URL + "/monthlytarget.php";
CallUrl wst = new CallUrl(CallUrl.GET_TASK, Invoice.this, 
"Lấy thông tin hóa đơn...");
wst.execute(new String[] {
sampleURL
});   

并在执行完成后使用onPostExecute更新 UIdoInBackground

最新更新