当我使用switch2或任何其他开关时,Toast.maketext会连续显示“Light1现在开着.”或者“Light1现在关机了”,如果是there语句还是HTTPRequestTasks,有什么问题吗?我正在尝试使用这个应用程序访问NodeMCU。我可以通过网页浏览器通过输入url来控制NodeMCU,但是在应用程序中它被switch1卡住了。以下是此应用程序的java代码:
package com.example.nodemcu.aoatechapp;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.Toast;
import android.support.v7.app.AlertDialog;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.ref.WeakReference;
import java.net.URI;
import java.net.URISyntaxException;
public class BedRoom1Activity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener{
final Context context = this;
private Switch switch1, switch2, switch3, switch4;
String address = "aoatech.ddns.net";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bed_room1);
switch1 = (Switch)findViewById(R.id.switch1);
switch1.setOnCheckedChangeListener(this);
switch2 = (Switch)findViewById(R.id.switch2);
switch2.setOnCheckedChangeListener(this);
switch3 = (Switch)findViewById(R.id.switch3);
switch3.setOnCheckedChangeListener(this);
switch4 = (Switch)findViewById(R.id.switch4);
switch4.setOnCheckedChangeListener(this);
}
public void onCheckedChanged (CompoundButton compoundButton, boolean b){
String serverAdress = address + ":3000";
String ledStatus;
if (switch1.isChecked()) {
ledStatus = "1";
Toast.makeText(BedRoom1Activity.this, "Light 1 is now Turned On...", Toast.LENGTH_SHORT).show();
HttpRequestTask1 R1 = new HttpRequestTask1(serverAdress,(BedRoom1Activity) context);
R1.execute(ledStatus);
}
else if (!switch1.isChecked()) {
ledStatus = "0";
Toast.makeText(BedRoom1Activity.this, "Light 1 is now Turned Off...", Toast.LENGTH_SHORT).show();
HttpRequestTask1 R1 = new HttpRequestTask1(serverAdress,(BedRoom1Activity) context);
R1.execute(ledStatus);
}
else if (switch2.isChecked()) {
ledStatus = "1";
Toast.makeText(BedRoom1Activity.this, "Light 2 is now Turned On...", Toast.LENGTH_SHORT).show();
HttpRequestTask2 R2 = new HttpRequestTask2(serverAdress,(BedRoom1Activity) context);
R2.execute(ledStatus);
}
else if (!switch2.isChecked()) {
ledStatus = "0";
Toast.makeText(BedRoom1Activity.this, "Light 2 is now Turned Off...", Toast.LENGTH_SHORT).show();
HttpRequestTask2 R2 = new HttpRequestTask2(serverAdress,(BedRoom1Activity) context);
R2.execute(ledStatus);
}
else if (switch3.isChecked()) {
ledStatus = "1";
Toast.makeText(BedRoom1Activity.this, "Fan is now Turned On...", Toast.LENGTH_SHORT).show();
HttpRequestTask3 R3 = new HttpRequestTask3(serverAdress,(BedRoom1Activity) context);
R3.execute(ledStatus);
}
else if (!switch3.isChecked()) {
ledStatus = "0";
Toast.makeText(BedRoom1Activity.this, "Fan is now Turned Off...", Toast.LENGTH_SHORT).show();
HttpRequestTask3 R3 = new HttpRequestTask3(serverAdress,(BedRoom1Activity) context);
R3.execute(ledStatus);
}
else if (switch4.isChecked()) {
ledStatus = "1";
Toast.makeText(BedRoom1Activity.this, "Socket is now Turned On...", Toast.LENGTH_SHORT).show();
HttpRequestTask4 R4 = new HttpRequestTask4(serverAdress,(BedRoom1Activity) context);
R4.execute(ledStatus);
}
else if (!switch4.isChecked()) {
ledStatus = "0";
Toast.makeText(BedRoom1Activity.this, "Socket is now Turned Off...", Toast.LENGTH_SHORT).show();
HttpRequestTask4 R4 = new HttpRequestTask4(serverAdress,(BedRoom1Activity) context);
R4.execute(ledStatus);
}
}
private static class HttpRequestTask1 extends AsyncTask<String, Void, String> {
private String serverAdress;
private String serverResponse = "";
AlertDialog dialog;
private WeakReference<BedRoom1Activity> activityReference;
private HttpRequestTask1(String serverAdress, BedRoom1Activity context) {
this.serverAdress = serverAdress;
this.activityReference = new WeakReference<>(context);
dialog = new AlertDialog.Builder(activityReference.get())
.setTitle("HTTP Response from Ip Address:")
.setCancelable(true)
.create();
}
@Override
protected String doInBackground(String... params) {
dialog.setMessage("Data sent , waiting response from server...");
if (!dialog.isShowing()) {
dialog.show();
}
String val = params[0];
final String url = "http://" + serverAdress + "/light1/" + val;
try {
HttpClient client = new DefaultHttpClient();
HttpGet getRequest = new HttpGet();
getRequest.setURI(new URI(url));
HttpResponse response = client.execute(getRequest);
InputStream inputStream = null;
inputStream = response.getEntity().getContent();
BufferedReader bufferedReader =
new BufferedReader(new InputStreamReader(inputStream));
serverResponse = bufferedReader.readLine();
inputStream.close();
} catch (URISyntaxException e) {
e.printStackTrace();
serverResponse = e.getMessage();
} catch (ClientProtocolException e) {
e.printStackTrace();
serverResponse = e.getMessage();
} catch (IOException e) {
e.printStackTrace();
serverResponse = e.getMessage();
}
return serverResponse;
}
@Override
protected void onPostExecute(String s) {
dialog.setMessage(serverResponse);
if (!dialog.isShowing())
dialog.show();
}
@Override
protected void onPreExecute() {
dialog.setMessage("Sending data to server, please wait...");
if (!dialog.isShowing())
dialog.show();
}
}
private static class HttpRequestTask2 extends AsyncTask<String, Void, String> {
private String serverAdress;
private String serverResponse = "";
AlertDialog dialog;
private WeakReference<BedRoom1Activity> activityReference;
private HttpRequestTask2(String serverAdress, BedRoom1Activity context) {
this.serverAdress = serverAdress;
this.activityReference = new WeakReference<>(context);
dialog = new AlertDialog.Builder(activityReference.get())
.setTitle("HTTP Response from Ip Address:")
.setCancelable(true)
.create();
}
@Override
protected String doInBackground(String... params) {
dialog.setMessage("Data sent , waiting response from server...");
if (!dialog.isShowing()) {
dialog.show();
}
String val = params[0];
final String url = "http://" + serverAdress + "/light2/" + val;
try {
HttpClient client = new DefaultHttpClient();
HttpGet getRequest = new HttpGet();
getRequest.setURI(new URI(url));
HttpResponse response = client.execute(getRequest);
InputStream inputStream = null;
inputStream = response.getEntity().getContent();
BufferedReader bufferedReader =
new BufferedReader(new InputStreamReader(inputStream));
serverResponse = bufferedReader.readLine();
inputStream.close();
} catch (URISyntaxException e) {
e.printStackTrace();
serverResponse = e.getMessage();
} catch (ClientProtocolException e) {
e.printStackTrace();
serverResponse = e.getMessage();
} catch (IOException e) {
e.printStackTrace();
serverResponse = e.getMessage();
}
return serverResponse;
}
@Override
protected void onPostExecute(String s) {
dialog.setMessage(serverResponse);
if (!dialog.isShowing())
dialog.show();
}
@Override
protected void onPreExecute() {
dialog.setMessage("Sending data to server, please wait...");
if (!dialog.isShowing())
dialog.show();
}
}
private static class HttpRequestTask3 extends AsyncTask<String, Void, String> {
private String serverAdress;
private String serverResponse = "";
AlertDialog dialog;
private WeakReference<BedRoom1Activity> activityReference;
private HttpRequestTask3(String serverAdress, BedRoom1Activity context) {
this.serverAdress = serverAdress;
this.activityReference = new WeakReference<>(context);
dialog = new AlertDialog.Builder(activityReference.get())
.setTitle("HTTP Response from Ip Address:")
.setCancelable(true)
.create();
}
@Override
protected String doInBackground(String... params) {
dialog.setMessage("Data sent , waiting response from server...");
if (!dialog.isShowing()) {
dialog.show();
}
String val = params[0];
final String url = "http://" + serverAdress + "/fan/" + val;
try {
HttpClient client = new DefaultHttpClient();
HttpGet getRequest = new HttpGet();
getRequest.setURI(new URI(url));
HttpResponse response = client.execute(getRequest);
InputStream inputStream = null;
inputStream = response.getEntity().getContent();
BufferedReader bufferedReader =
new BufferedReader(new InputStreamReader(inputStream));
serverResponse = bufferedReader.readLine();
inputStream.close();
} catch (URISyntaxException e) {
e.printStackTrace();
serverResponse = e.getMessage();
} catch (ClientProtocolException e) {
e.printStackTrace();
serverResponse = e.getMessage();
} catch (IOException e) {
e.printStackTrace();
serverResponse = e.getMessage();
}
return serverResponse;
}
@Override
protected void onPostExecute(String s) {
dialog.setMessage(serverResponse);
if (!dialog.isShowing())
dialog.show();
}
@Override
protected void onPreExecute() {
dialog.setMessage("Sending data to server, please wait...");
if (!dialog.isShowing())
dialog.show();
}
}
private static class HttpRequestTask4 extends AsyncTask<String, Void, String> {
private String serverAdress;
private String serverResponse = "";
AlertDialog dialog;
private WeakReference<BedRoom1Activity> activityReference;
private HttpRequestTask4(String serverAdress, BedRoom1Activity context) {
this.serverAdress = serverAdress;
this.activityReference = new WeakReference<>(context);
dialog = new AlertDialog.Builder(activityReference.get())
.setTitle("HTTP Response from Ip Address:")
.setCancelable(true)
.create();
}
@Override
protected String doInBackground(String... params) {
dialog.setMessage("Data sent , waiting response from server...");
if (!dialog.isShowing()) {
dialog.show();
}
String val = params[0];
final String url = "http://" + serverAdress + "/socket/" + val;
try {
HttpClient client = new DefaultHttpClient();
HttpGet getRequest = new HttpGet();
getRequest.setURI(new URI(url));
HttpResponse response = client.execute(getRequest);
InputStream inputStream = null;
inputStream = response.getEntity().getContent();
BufferedReader bufferedReader =
new BufferedReader(new InputStreamReader(inputStream));
serverResponse = bufferedReader.readLine();
inputStream.close();
} catch (URISyntaxException e) {
e.printStackTrace();
serverResponse = e.getMessage();
} catch (ClientProtocolException e) {
e.printStackTrace();
serverResponse = e.getMessage();
} catch (IOException e) {
e.printStackTrace();
serverResponse = e.getMessage();
}
return serverResponse;
}
@Override
protected void onPostExecute(String s) {
dialog.setMessage(serverResponse);
if (!dialog.isShowing())
dialog.show();
}
@Override
protected void onPreExecute() {
dialog.setMessage("Sending data to server, please wait...");
if (!dialog.isShowing())
dialog.show();
}
}
}
发布于 2018-09-15 16:25:52
请注意:
if (switch1.isChecked()) {
和
else if (!switch1.isChecked()) {
所有可能的条件都包含在这两个条件表达式中!
switch1.isChecked()
等于ture
或flase
,所以
Toast.makeText(BedRoom1Activity.this, "Light 1 is now Turned On...", Toast.LENGTH_SHORT).show();
当然被处决了!以及其他分支被省略。
你可以写“如果”和“其他”来判断每一种状态。例如:
if (switch1.isChecked()) {
}else{
}
if (switch2.isChecked()) {
}else{
}
编辑了--您设置了多个CompoundButton侦听器,因此您可以直接检查哪一种状态发生了如下更改:
switch (compoundButton.getId()) {
case R.id.switch1:
if (switch1.isChecked()) {
}else{
}
break;
case R.id.switch2:
break;
}
.....
https://stackoverflow.com/questions/52349860
复制相似问题