Android ProcessDialog未正确显示?
这是我在LoginActivity.java中的函数。因此,单击按钮后,我将调用此函数Android ProcessDialog未正确显示?,android,Android,这是我在LoginActivity.java中的函数。因此,单击按钮后,我将调用此函数 public void postHttpRequest(String userId,String pass,TextView error){ RequestClient reqClient = new RequestClient(LoginActivity.this); String AppResponse = null; try {
public void postHttpRequest(String userId,String pass,TextView error){
RequestClient reqClient = new RequestClient(LoginActivity.this);
String AppResponse = null;
try {
url = "myurl";
Log.d("URL", url);
AppResponse = reqClient.execute().get();
String status = ValidateLoginStatus.checkLoginStatus(AppResponse);
Log.d("Status recived", status);
if(status.equals("200")){
saveInformation(userId,pass);
startingActivity(HOST_URL);
}else{
error.setText("Incorrect UserName or Password");
}
} catch (Exception e) {
Log.e("Exception Occured", "Exception is "+e.getMessage());
}
}
从这个函数中,我调用了一个用于Http通信的AsynkTask。因此,当我引导响应时,只要单击按钮,我的processDialog就会打开一秒钟。我想,当我单击processDialog上的按钮时,我的processDialog应该会打开,直到我得到响应
public class RequestClient extends AsyncTask<String, Void, String>{
ProgressDialog pDialog;
Context context;
public RequestClient(Context c) {
context = c;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(context);
pDialog.setMessage("Authenticating user...");
pDialog.show();
}
@Override
protected String doInBackground(String... aurl){
String responseString="";
DefaultHttpClient httpClient=new DefaultHttpClient();
try {
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(LoginActivity.url);
HttpResponse responseGet = client.execute(get);
HttpEntity resEntityGet = responseGet.getEntity();
if (resEntityGet != null) {
responseString = EntityUtils.toString(resEntityGet);
Log.i("GET RESPONSE", responseString);
}
} catch (Exception e) {
Log.d("ANDRO_ASYNC_ERROR", "Error is "+e.toString());
}
Log.d("ANDRO_ASYNC_ERROR", responseString);
httpClient.getConnectionManager().shutdown();
return responseString;
}
@Override
protected void onPostExecute(String response) {
super.onPostExecute(response);
if(pDialog!=null)
pDialog.dismiss();
}
}
public类RequestClient扩展异步任务{
ProgressDialog;
语境;
公共请求客户端(上下文c){
上下文=c;
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pDialog=新建进度对话框(上下文);
setMessage(“正在验证用户…”);
pDialog.show();
}
@凌驾
受保护的字符串背景(字符串…aurl){
字符串responseString=“”;
DefaultHttpClient httpClient=新的DefaultHttpClient();
试一试{
HttpClient=new DefaultHttpClient();
HttpGet=newhttpget(LoginActivity.url);
HttpResponse responseGet=client.execute(get);
HttpEntity-resEntityGet=responseGet.getEntity();
如果(resEntityGet!=null){
responseString=EntityUtils.toString(当前设置);
Log.i(“获取响应”,responseString);
}
}捕获(例外e){
Log.d(“ANDRO_ASYNC_ERROR”,“ERROR is”+e.toString());
}
Log.d(“ANDRO_异步错误”,responseString);
httpClient.getConnectionManager().shutdown();
回报率;
}
@凌驾
受保护的void onPostExecute(字符串响应){
super.onPostExecute(响应);
如果(pDialog!=null)
pDialog.disclose();
}
}
因此,请建议我必须进行哪些更改,以使processDialog正确显示在设备的中心
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(context);
pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pDialog.setMessage("Authenticating user...");
if (pDialog != null && !pDialog.isShowing()) {
pDialog.show();
}
}
//在日志中添加样式
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(context);
pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pDialog.setMessage("Authenticating user...");
if (pDialog != null && !pDialog.isShowing()) {
pDialog.show();
}
}
您的按钮代码似乎不正确,因为它是异步的,但您正试图将其用作标准同步代码 尝试将此代码移动到onPostExecute中:
String status = ValidateLoginStatus.checkLoginStatus(response);
Log.d("Status recived", status);
if(status.equals("200")){
saveInformation(userId,pass);
startingActivity(HOST_URL);
}else{
error.setText("Incorrect UserName or Password");
}
并使此按钮单击“代码”:
public void postHttpRequest(String userId,String pass,TextView error){
RequestClient reqClient = new RequestClient(LoginActivity.this);
String AppResponse = null;
try {
url = "myurl";
Log.d("URL", url);
reqClient.execute();
} catch (Exception e) {
Log.e("Exception Occured", "Exception is "+e.getMessage());
}
}
您的按钮代码似乎不正确,因为它是异步的,但您正试图将其用作标准同步代码 尝试将此代码移动到onPostExecute中:
String status = ValidateLoginStatus.checkLoginStatus(response);
Log.d("Status recived", status);
if(status.equals("200")){
saveInformation(userId,pass);
startingActivity(HOST_URL);
}else{
error.setText("Incorrect UserName or Password");
}
并使此按钮单击“代码”:
public void postHttpRequest(String userId,String pass,TextView error){
RequestClient reqClient = new RequestClient(LoginActivity.this);
String AppResponse = null;
try {
url = "myurl";
Log.d("URL", url);
reqClient.execute();
} catch (Exception e) {
Log.e("Exception Occured", "Exception is "+e.getMessage());
}
}
从上面的链接绘制
调用AsyncTask
的get()
方法将阻塞主线程并等待返回结果。这有效地使使用AsyncTask成为同步操作,在这种情况下,使用AsyncTask没有任何意义
我能想到的使用get()
方法的唯一原因是来自主(UI)线程以外的线程,尽管我想不出很多这样做的原因
点击按钮
RequestClient reqClient = new RequestClient(LoginActivity.this,new TheInterface() {
@Override
public void theMethod(String result) {
Log.i("Result =",result);
}
});
reqClient.execute(url); // no get(). pass url to doInBackground()
在你的活动课上
public interface TheInterface {
public void theMethod(String result);
}
}
异步任务
public class RequestClient extends AsyncTask<String, Void, String>{
ProgressDialog pDialog;
Context context;
TheInterface listener;
public RequestClient(Context c,TheInterface listen) {
context = c;
listener = listen;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(context);
pDialog.setMessage("Authenticating user...");
pDialog.show();
}
@Override
protected String doInBackground(String... aurl){
String responseString="";
HttpClient client;
try {
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(aurl[0]); // url
HttpResponse responseGet = client.execute(get);
HttpEntity resEntityGet = responseGet.getEntity();
if (resEntityGet != null) {
responseString = EntityUtils.toString(resEntityGet);
Log.i("GET RESPONSE", responseString);
}
} catch (Exception e) {
Log.d("ANDRO_ASYNC_ERROR", "Error is "+e.toString());
}
Log.d("ANDRO_ASYNC_ERROR", responseString);
client.getConnectionManager().shutdown();
return responseString;
}
@Override
protected void onPostExecute(String response) {
super.onPostExecute(response);
pDialog.dismiss();
if (listener != null)
{
listener.theMethod(result);
}
}
}
public类RequestClient扩展异步任务{
ProgressDialog;
语境;
面对面的倾听者;
公共请求客户端(上下文c,接口侦听){
上下文=c;
聆听者=倾听;
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pDialog=新建进度对话框(上下文);
setMessage(“正在验证用户…”);
pDialog.show();
}
@凌驾
受保护的字符串背景(字符串…aurl){
字符串responseString=“”;
HttpClient;
试一试{
HttpClient=new DefaultHttpClient();
HttpGet=newhttpget(aurl[0]);//url
HttpResponse responseGet=client.execute(get);
HttpEntity-resEntityGet=responseGet.getEntity();
如果(resEntityGet!=null){
responseString=EntityUtils.toString(当前设置);
Log.i(“获取响应”,responseString);
}
}捕获(例外e){
Log.d(“ANDRO_ASYNC_ERROR”,“ERROR is”+e.toString());
}
Log.d(“ANDRO_异步错误”,responseString);
client.getConnectionManager().shutdown();
回报率;
}
@凌驾
受保护的void onPostExecute(字符串响应){
super.onPostExecute(响应);
pDialog.disclose();
if(侦听器!=null)
{
方法(结果);
}
}
}
从上面的链接绘制
调用AsyncTask
的get()
方法将阻塞主线程并等待返回结果。这有效地使使用AsyncTask成为同步操作,在这种情况下,使用AsyncTask没有任何意义
我能想到的使用get()
方法的唯一原因是来自主(UI)线程以外的线程,尽管我想不出很多这样做的原因
点击按钮
RequestClient reqClient = new RequestClient(LoginActivity.this,new TheInterface() {
@Override
public void theMethod(String result) {
Log.i("Result =",result);
}
});
reqClient.execute(url); // no get(). pass url to doInBackground()
在你的活动课上
public interface TheInterface {
public void theMethod(String result);
}
}
异步任务
public class RequestClient extends AsyncTask<String, Void, String>{
ProgressDialog pDialog;
Context context;
TheInterface listener;
public RequestClient(Context c,TheInterface listen) {
context = c;
listener = listen;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(context);
pDialog.setMessage("Authenticating user...");
pDialog.show();
}
@Override
protected String doInBackground(String... aurl){
String responseString="";
HttpClient client;
try {
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(aurl[0]); // url
HttpResponse responseGet = client.execute(get);
HttpEntity resEntityGet = responseGet.getEntity();
if (resEntityGet != null) {
responseString = EntityUtils.toString(resEntityGet);
Log.i("GET RESPONSE", responseString);
}
} catch (Exception e) {
Log.d("ANDRO_ASYNC_ERROR", "Error is "+e.toString());
}
Log.d("ANDRO_ASYNC_ERROR", responseString);
client.getConnectionManager().shutdown();
return responseString;
}
@Override
protected void onPostExecute(String response) {
super.onPostExecute(response);
pDialog.dismiss();
if (listener != null)
{
listener.theMethod(result);
}
}
}
public类RequestClient扩展异步任务{
ProgressDialog;
语境;
面对面的倾听者;
公共请求客户端(上下文c,接口侦听){
上下文=c;
聆听者=倾听;
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pDialog=新建进度对话框(上下文);
setMessage(“正在验证用户…”);
pDialog.show();
}
@凌驾
受保护的字符串背景(字符串…aurl){
字符串responseString=“”;
HttpClient;
试一试{
HttpClient=new DefaultHttpClient();
HttpGet=newhttpget(aurl[0]);//url
HttpResponse responseGet=client.execute(get);
HttpEntity-resEntityGet=responseGet.getEntity();
如果(resEntityGet!=null){
responseString=EntityUtils.toString(当前设置);
Log.i(“获取响应”,responseString);
}
}ca