Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 多次单击按钮时重复启动的活动_Android_Android Asynctask - Fatal编程技术网

Android 多次单击按钮时重复启动的活动

Android 多次单击按钮时重复启动的活动,android,android-asynctask,Android,Android Asynctask,我在主活动上有一个登录按钮,它执行一个aysncTask,在PostExecute上启动另一个活动,但是当用户多次单击该按钮时 它会多次启动该活动,如何防止这种情况发生 这是我的onClick侦听器: loginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (I

我在主活动上有一个登录按钮,它执行一个aysncTask,在PostExecute上启动另一个活动,但是当用户多次单击该按钮时 它会多次启动该活动,如何防止这种情况发生

这是我的onClick侦听器:

loginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (IP != "null") {
                    password = enterPassword.getText().toString();
                    progressB.setVisibility(View.VISIBLE);
                new httpLogin().execute();}
                else {
                    Toast.makeText(getApplicationContext(), "please enter H2O host address before attempting to login", Toast.LENGTH_LONG).show();
                }
            }
        }); 
这是异步任务代码:

public class httpLogin extends AsyncTask<Void,Void,String> {
        String rs,result;
        JSONArray jArray;
        boolean r,isConnected;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressB.setProgress(0);
            isConnected=isOnline();
        }

        @Override
        protected String doInBackground(Void... params) {

            try {

                String link = "http://"+IP+"/H2O.asmx/Check_Waiter?Password="+password;
                HttpClient client = new DefaultHttpClient();
                HttpGet request = new HttpGet();
                request.setURI(new URI(link));
                HttpResponse response = client.execute(request);
                BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"), 8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                result = sb.toString();
                String[] separated = result.split(">");
                JSONObject jObject = new JSONObject(separated[2]);
                jArray = jObject.getJSONArray("Waiter");
                if(jArray.length()>0) {
                    JSONObject json_data = jArray.getJSONObject(0);
                    waiterID = json_data.getString("UserNo");
                    waiterName = json_data.getString("UserName");
                    r=true;
                }
                else r=false;
                rs = "sucessful";
            } catch (Exception e) {

                rs = "Fail";
            }
            return rs;
        }
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            if(isConnected)
            if (r) {
                Toast.makeText(getApplicationContext(), "User ID:" + waiterID + "\n Username:" + waiterName, Toast.LENGTH_SHORT).show();

               Intent intentFSelector = new Intent(MainActivity.this, FloorSelector.class);

        startActivity(intentFSelector); 
            } 
    }

尝试此操作并在您的意图中插入:


intent.addFlags(intent.FLAG\u ACTIVITY\u REORDER\u TO\u FRONT)

尝试此操作并在您的意图中插入:


intent.addFlags(intent.FLAG\u ACTIVITY\u REORDER\u TO\u FRONT)

在执行
异步任务后禁用该按钮

if (IP != "null") {
    password = enterPassword.getText().toString();
    progressB.setVisibility(View.VISIBLE);
    new httpLogin().execute();
    ((Button) view).setEnabled(false);
}

理想情况下,您应该直接调用按钮上的
startActivity()
,单击并执行
onCreate()中的
AsyncTask
。下载数据时,您将在其中一个数据视图中显示“加载…”。完成后,您将更新
onPostExecute()
中的视图,或者在下载失败时显示错误消息;假设用户处于脱机状态。

在执行
异步任务后禁用该按钮

if (IP != "null") {
    password = enterPassword.getText().toString();
    progressB.setVisibility(View.VISIBLE);
    new httpLogin().execute();
    ((Button) view).setEnabled(false);
}

理想情况下,您应该直接调用按钮上的
startActivity()
,单击并执行
onCreate()中的
AsyncTask
。下载数据时,您将在其中一个数据视图中显示“加载…”。完成后,您将更新
onPostExecute()
中的视图,或者在下载失败时显示错误消息;说明用户是否处于脱机状态。

使用ProgressDialog可以避免多次单击登录按钮

ProgressDialog authProgressDialog;
在异步任务中

public class httpLogin extends AsyncTask<Void,Void,String> {
    String rs,result;
    JSONArray jArray;
    boolean r,isConnected;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        authProgressDialog = ProgressDialog.show(MainActivity.this, "", "Loading....", true, false);   
    }

protected Object doInBackground(Object... params) {
      //your code
    }

 protected void onPostExecute(Object result){

            if (authProgressDialog!=null) {
                if (authProgressDialog.isShowing()) {
                        authProgressDialog.dismiss();       
                }
            }
    }
   }
公共类httpLogin扩展异步任务{
字符串rs,结果;
杰索纳雷·贾雷;
布尔r,不连通;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
authProgressDialog=ProgressDialog.show(MainActivity.this,“,”加载…”,true,false);
}
受保护对象doInBackground(对象…参数){
//你的代码
}
受保护的void onPostExecute(对象结果){
如果(authProgressDialog!=null){
if(authProgressDialog.isShowing()){
authProgressDialog.disclose();
}
}
}
}

当您单击按钮时,将显示一个进度对话框,此对话框将在执行AsyncTask后关闭。

您可以使用ProgressDialog避免多次单击登录按钮

ProgressDialog authProgressDialog;
public class httpLogin extends AsyncTask<Void,Void,String> {
    String rs,result;
    JSONArray jArray;
    boolean r,isConnected;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        authProgressDialog = ProgressDialog.show(MainActivity.this, "", "Loading....", true, false);   
    }

protected Object doInBackground(Object... params) {
      //your code
    }

 protected void onPostExecute(Object result){

            if (authProgressDialog!=null) {
                if (authProgressDialog.isShowing()) {
                        authProgressDialog.dismiss();       
                }
            }
    }
   }
在异步任务中

public class httpLogin extends AsyncTask<Void,Void,String> {
    String rs,result;
    JSONArray jArray;
    boolean r,isConnected;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        authProgressDialog = ProgressDialog.show(MainActivity.this, "", "Loading....", true, false);   
    }

protected Object doInBackground(Object... params) {
      //your code
    }

 protected void onPostExecute(Object result){

            if (authProgressDialog!=null) {
                if (authProgressDialog.isShowing()) {
                        authProgressDialog.dismiss();       
                }
            }
    }
   }
公共类httpLogin扩展异步任务{
字符串rs,结果;
杰索纳雷·贾雷;
布尔r,不连通;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
authProgressDialog=ProgressDialog.show(MainActivity.this,“,”加载…”,true,false);
}
受保护对象doInBackground(对象…参数){
//你的代码
}
受保护的void onPostExecute(对象结果){
如果(authProgressDialog!=null){
if(authProgressDialog.isShowing()){
authProgressDialog.disclose();
}
}
}
}

当您单击按钮时,将显示一个进度对话框,此对话框将在执行AsyncTask后关闭

谢谢。我使用了setEnabled(false),至于setClickable它不起作用,按钮仍然可以点击多次。好的,谢谢分享。我查看了文档,似乎setClickable()只会在视觉上影响按钮,即单击时是否应将其视为按下。谢谢。我使用了setEnabled(false),至于setClickable它不起作用,按钮仍然可以点击多次。好的,谢谢分享。我检查了文档,似乎setClickable()只会在视觉上影响按钮,即单击时是否应将其视为按下。
public class httpLogin extends AsyncTask<Void,Void,String> {
    String rs,result;
    JSONArray jArray;
    boolean r,isConnected;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        authProgressDialog = ProgressDialog.show(MainActivity.this, "", "Loading....", true, false);   
    }

protected Object doInBackground(Object... params) {
      //your code
    }

 protected void onPostExecute(Object result){

            if (authProgressDialog!=null) {
                if (authProgressDialog.isShowing()) {
                        authProgressDialog.dismiss();       
                }
            }
    }
   }