Android 如何聚合progressdialog?
我的应用程序需要与服务器进行大量通信。有些呼叫需要很长时间,因此我需要显示progressdialogs。在此之前,我提出:Android 如何聚合progressdialog?,android,progressdialog,Android,Progressdialog,我的应用程序需要与服务器进行大量通信。有些呼叫需要很长时间,因此我需要显示progressdialogs。在此之前,我提出: ProgressDialog pd; @Override protected void onPreExecute() { pd = new ProgressDialog(app); pd.setOwnerActivity(app); pd.setTitle("И
ProgressDialog pd;
@Override
protected void onPreExecute() {
pd = new ProgressDialog(app);
pd.setOwnerActivity(app);
pd.setTitle("Идет загрузка...");
pd.setCancelable(true);
pd.show();
}
protected void onPostExecute(JSONObject result) {
super.onPostExecute(result);
pd.dismiss();
//some code
}
扩展异步任务的每个类。然而,现在我必须在asynctask类上使用.get(),所以progressdialog仅在任务执行时闪烁
之后,我尝试从asynctask类中删除progressdialog调用并将其放入JsonParser:
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static JSONArray jObj1 = null;
static String json = "";
DefaultHttpClient httpClient = null;
static Context context;
ProgressDialog pd;
// constructor
public JSONParser() {
}
private static Boolean isOnline() {
context = UILApplication.getAppContext();
Log.d("CONTEXT",context.toString());
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
Log.d("Conected", "Conected");
return true;
}
}
}
}
Log.d("disconected", "disconected");
return false;
}
public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) {
if (isOnline()) {
pd = new ProgressDialog(context);
//pd.setOwnerActivity(context);
pd.setTitle("Идет загрузка...");
pd.setCancelable(true);
pd.show();
try {
String u = url;
u = u + "?";
httpClient = HttpClientFactory.getThreadSafeClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
for (int i = 0; i < params.size(); i++) {
u = u + params.get(i).getName() + "="
+ params.get(i).getValue() + "&";
}
Log.d("your url is", u);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
Log.d("data is sent", "true");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return null;
} catch (ClientProtocolException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
Log.d("wait", "true");
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(is, "UTF-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
if (json.contains("error:2")) {
return null;
}
Log.d("JSON", json);
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
return null;
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
return null;
}
pd.dismiss();
return jObj;
}
pd.dismiss();
error();
return null;
}
}
公共类JSONParser{
静态InputStream为空;
静态JSONObject jObj=null;
静态JSONArray作业j1=null;
静态字符串json=“”;
DefaultHttpClient httpClient=null;
静态语境;
进展性帕金森病;
//建造师
公共JSONParser(){
}
私有静态布尔isOnline(){
context=UILApplication.getAppContext();
Log.d(“CONTEXT”,CONTEXT.toString());
ConnectionManager连接=(ConnectionManager)上下文
.getSystemService(Context.CONNECTIVITY\u服务);
if(连接性!=null){
NetworkInfo[]info=connectivity.getAllNetworkInfo();
如果(信息!=null){
对于(int i=0;i
不幸的是,这让我犯了错误。据我所知,我应该在UIthread中调用dialog
06-20 13:46:01.368:带系统错误(1244):
java.util.concurrent.ExecutionException:java.lang.RuntimeException:
无法在尚未调用的线程内创建处理程序
活套准备()06-20 13:46:01.368:W/系统错误(1244):在
java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:223)
06-20 13:46:01.377:带系统错误(1244):在
java.util.concurrent.FutureTask.get(FutureTask.java:82)06-20
13:46:01.377:W/系统错误(1244):在
android.os.AsyncTask.get(AsyncTask.java:482)06-20 13:46:01.377:
W/系统错误(1244):在
ua.mirkvartir.android.frontend.LoginActivity$2.onClick(LoginActivity.java:108)
06-20 13:46:01.377:带系统错误(1244):在
android.view.view.performClick(view.java:4084)06-20 13:46:01.377:
W/系统错误(1244):在
android.view.view$PerformClick.run(view.java:16966)06-20
13:46:01.387:W/系统错误(1244):在
handleCallback(Handler.java:615)06-20
13:46:01.387:W/系统错误(1244):在
android.os.Handler.dispatchMessage(Handler.java:92)06-20
13:46:01.387:W/系统错误(1244):在
android.os.Looper.loop(Looper.java:137)06-20 13:46:01.387:
W/系统错误(1244):在
android.app.ActivityThread.main(ActivityThread.java:4745)06-20
13:46:01.397:W/系统错误(1244):在
java.lang.reflect.Method.Invokenactive(本机方法)06-20
13:46:01.397:W/系统错误(1244):在
java.lang.reflect.Method.invoke(Method.java:511)06-20 13:46:01.397:
W/系统错误(1244):在
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
06-20 13:46:01.397:带系统错误(1244):在
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)06-20
13:46:01.407:W/系统错误(1244):在
dalvik.system.NativeStart.main(本机方法)06-20 13:46:01.407:
带系统错误(1
class Dialog{
public void showDialog(){
pd = new ProgressDialog(app);
pd.setOwnerActivity(app);
pd.setTitle("Идет загрузка...");
pd.setCancelable(true);
pd.show();
}
public void dismissDialog(){
pd.dismiss();
}
}