【发布时间】:2014-11-26 12:28:48
【问题描述】:
我从中调用 AsyncTask 进行登录的活动。 如果返回 true,则切换到另一个活动。
signIn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.d("On Click Sign In", "Before PD shown");
// pd.show();
Log.d("On Click Sign In", "After PD shown");
try {
if (new SignIn(SessionLogin.this).execute(email, pass).get())
{
Log.d("onClick", "True");
Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_LONG).show();
Intent i = new Intent(SessionLogin.this, DashBoardMain.class);
// pd.dismiss();
Log.d("SessionLogin", "true SignIn");
startActivity(i);
finish();
}
else
{
Toast.makeText(SessionLogin.this, "Sorry! Something went wrong. Please try again.", Toast.LENGTH_LONG).show();
Intent i = new Intent(SessionLogin.this, Woftos_sign_in_up.class);
// pd.dismiss();
Log.d("SessionLogin", "false || Null SignIn");
startActivity(i);
finish();
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
我在其中连接到数据库并返回值的 AsyncTask。 在异步任务运行之前,我想显示 ProgressDialog。
public class SignIn extends AsyncTask<String, Void, Boolean> {
String queryString;
ProgressDialog PD;
public static String NodeID=null;
public static String Gender=null;
public static String imageName=null;
String result;
Context context;
public SignIn(Context mcontext){
context=mcontext;
Log.d("constructor", "context "+context.toString());
PD=new ProgressDialog(mcontext);
PD.setProgressStyle(ProgressDialog.STYLE_SPINNER);
PD.setTitle("Please Wait...");
PD.setMessage("Signing in...");
PD.setCancelable(false);
PD.setIndeterminate(true);
PD.show();
}
protected void onPostExecute(Boolean x) {
super.onPostExecute(x);
if(PD.isShowing()){
Log.d("onPostExecute", "ProgressDialog b4 dismiss");
PD.dismiss();
Log.d("onPostExecute", "ProgressDialog after dismiss");
}
}
@Override
protected Boolean doInBackground(String... arg0) {
Log.d("in async", "" + arg0[0] + " " + arg0[1]);
try {
//Connecting to database
DBConnect.connect();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
queryString = "{\"query\":\"START n=node(*) WHERE n.Email_Id='"
+ arg0[0] + "' AND n.Password='" + arg0[1]
+ "' RETURN n.Password,id(n),n.Gender,n.Profile_Photo\", \"params\":{}}";
try {
//Sending Query
DBConnect.sendQuery(queryString);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
//Getting result of Query
result = DBConnect.readInputStream();
JSONObject obj1 = new JSONObject(result);
JSONArray nameArray = obj1.getJSONArray("data");
int res=nameArray.length();
if(res==0)
{
return false;
}
result = nameArray.getJSONArray(0).getString(0);
NodeID = nameArray.getJSONArray(0).getString(1);
Gender = nameArray.getJSONArray(0).getString(2);
//imageName = nameArray.getJSONArray(0).getString(3);
Log.d("NodeID-Gender in SignIn", ""+result+" " + NodeID+" "+Gender);
DashBoardMain.nodeID=NodeID;
DashBoardMain.DBGender=Gender;
//DashBoardMain.imageName=imageName;
return true;
//DashBoardMain.imageName=imageName;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
无论我做什么,ProgressDialog 都不会出现。其余代码可以正常连接数据库并返回值。 请帮忙..
【问题讨论】:
-
你看到 Log.d("onPostExecute", "ProgressDialog b4 dismiss"); Log.d("onPostExecute", "关闭后的ProgressDialog");这些日志在 logcat 中?
-
这意味着您的进度对话框正在显示可能是 doInBackground 太快了您看不到 progressDialog,请您尝试在后台添加延迟 1-2 秒并检查它是否显示进度对话框
-
与您的问题无关,我建议您在使用 AsyncTask 时使用 onPreExecute ,它会根据标准对您有所帮助,而且效果很好,因为其他所有人都在他们的答案中指定了这一点
-
获取Log.d的结果("NodeID-Gender in SignIn", ""+result+" " + NodeID+" "+Gender);在 logcat 上,大约需要 1-2 分钟,但没有出现进度条。
-
我尝试将它放入 onPreExecute() 但 ProgressDialog 仍然没有出现。
标签: android android-asynctask progressdialog