java - 如何从服务器获取回声
问题描述
我正在尝试从我的服务器获得回声回复。这样做的目的是检查互联网连接并检查服务器状态。如果我得到回复,将出现一个对话框,其中包含一条简单的消息。没有得到回复也是如此。
收到回复时出现对话框,但未收到回复时不会出现。
在我的 uploadDB.class 中,我有多个案例将在 PHP 文件中执行不同的功能。一种情况是“ping”功能,另一种情况是“updatecounter”功能。
当我删除uploadDB.class 中的“updatecounter”案例时,一切似乎都正常。由于我的要求,我不应该删除“updatecounter”案例。
有人可以建议我如何解决这个问题吗?
以下是我在 Logcat 中的代码和错误。
PHP 文件
if (isset($_POST['type'])){
if ($_POST['type'] == "ping"){
echo "success";
}
MainActivity.class
public boolean isInternetConnected = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pingTask();
}
private void pingTask() {
new uploadDB(new uploadDB.returnResult() {
@Override
public void onFinish(String result) {
if (result.equalsIgnoreCase("success")) {
isInternetConnected = true;
showdialog("Server Status", "Working");
} else {
isInternetConnected = false;
showdialog("Server Status", "Not Working");
}
}
}).execute("ping");
}
上传数据库类
protected String doInBackground(String... params) {
String method = params[0];
String data = "";
String link = "www.example.com/example.php";
switch (method){
case "ping": {
try{
data = URLEncoder.encode("type", "UTF-8") + "=" + URLEncoder.encode("ping", "UTF-8");
Log.e(TAG,"DATA: " + data);
}catch (UnsupportedEncodingException e){
Log.e(TAG, "UnsupportedEncodingException: " + e.toString());
}
try {
URL url = new URL(link);
HttpURLConnection h = (HttpURLConnection) url.openConnection();
h.setDoInput(true);
h.setDoOutput(true);
OutputStreamWriter owriter =
new OutputStreamWriter(h.getOutputStream());
owriter.write(data);
owriter.flush();
BufferedReader b = new BufferedReader
(new InputStreamReader(h.getInputStream(), "UTF-8"), 8);
StringBuilder builder = new StringBuilder();
String line;
while ((line = b.readLine()) != null) {
builder.append(line);
}
return builder.toString();
} catch (IOException e) {
Log.e(TAG, "IOException: " + e.toString());
}
}
case "updatecounter": {
String macAddress = params[1];
String sensorname = params[2];
String counter = params[3];
try {
data = URLEncoder.encode("type", "UTF-8") + "=" + URLEncoder.encode("counter", "UTF-8")
+ "&" + URLEncoder.encode("gate_name", "UTF-8") + "=" + URLEncoder.encode(sensorname, "UTF-8")
+ "&" + URLEncoder.encode("mac", "UTF-8") + "=" + URLEncoder.encode(macAddress, "UTF-8")
+ "&" + URLEncoder.encode("counter", "UTF-8") + "=" + URLEncoder.encode(counter, "UTF-8");
Log.e(TAG,"DATA: " + data);
} catch (UnsupportedEncodingException e) {
Log.e(TAG, "UnsupportedEncodingException: " + e.toString());
}
try {
URL url = new URL(link);
HttpURLConnection h = (HttpURLConnection) url.openConnection();
h.setDoInput(true);
h.setDoOutput(true);
OutputStreamWriter owriter =
new OutputStreamWriter(h.getOutputStream());
owriter.write(data);
owriter.flush();
BufferedReader b = new BufferedReader
(new InputStreamReader(h.getInputStream(), "UTF-8"), 8);
StringBuilder builder = new StringBuilder();
String line;
while ((line = b.readLine()) != null) {
builder.append(line);
}
return builder.toString();
} catch (IOException e) {
//activity.isInternetConnected = false;
Log.e(TAG, "IOException: " + e.toString());
}
}
Logcat 中的错误
Process: com.example.postserver, PID: 21624
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:353)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
at java.util.concurrent.FutureTask.run(FutureTask.java:271)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
at com.example.postserver.uploadDB.doInBackground(uploadDB.java:69)
at com.example.postserver.uploadDB.doInBackground(uploadDB.java:16)
解决方案
您需要在案例末尾添加一个中断。如果你不添加它,之后的每个案例都将被执行:
switch (method){
case "ping": {
try{
data = URLEncoder.encode("type", "UTF-8") + "=" + URLEncoder.encode("ping", "UTF-8");
Log.e(TAG,"DATA: " + data);
}catch (UnsupportedEncodingException e){
Log.e(TAG, "UnsupportedEncodingException: " + e.toString());
}
try {
URL url = new URL(link);
HttpURLConnection h = (HttpURLConnection) url.openConnection();
h.setDoInput(true);
h.setDoOutput(true);
OutputStreamWriter owriter =
new OutputStreamWriter(h.getOutputStream());
owriter.write(data);
owriter.flush();
BufferedReader b = new BufferedReader
(new InputStreamReader(h.getInputStream(), "UTF-8"), 8);
StringBuilder builder = new StringBuilder();
String line;
while ((line = b.readLine()) != null) {
builder.append(line);
}
return builder.toString();
} catch (IOException e) {
Log.e(TAG, "IOException: " + e.toString());
}
}
break;
case "updatecounter": {
推荐阅读
- python - 可以在 Django 错误响应中仅显示回溯吗?
- r - 修改 dplyr 中的单个单元格值
- javascript - 如何结合自定义钩子和选择器结果?
- r - 将矩阵中的列表与 R 中的另一个矩阵进行比较
- android - Android分页库在失效时将列表滚动到顶部
- macos - NSSplitView 隐藏子视图期间的奇怪行为
- javascript - 有没有办法直接从服务器下载大文件?(无需等待blob响应)
- java - $expand 在我的 JPA/Olingo 2.0.11 OData 服务中不起作用
- testing - 用他们的 test-binder 测试 spring-cloud-stream 总是抛出 MessageDeliveryException: Dispatcher has no subscribers for channel
- python - 回溯时更改变量