android AysncTask doInbackground
android AysncTask doInbackground
我是 android 的新手,我正在尝试在 android 中实现 socket
它是一个简单的客户端-服务器应用程序。
我在其中创建了 2 buttons
("connect"、"disconnect"),并使用 AysncTask doInBackground
我正在连接到服务器并与服务器断开连接,但它仅适用于连接,不幸的是,当我试图断开我的应用程序关闭时。
下面是我的 mainactivity
代码。
感谢您的帮助
package com.example.sockettest;
import androidx.appcompat.app.AppCompatActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import java.io.*;
import java.util.*;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.lang.String;
class conn extends AsyncTask<String, Void, Void>{
Socket operator_socket;
@Override
protected Void doInBackground(String... voids) {
String str;
str = voids[0];
if (str.equals("conn")) {
try {
operator_socket = new Socket("192.168.0.103", 6666);
}catch (UnsupportedEncodingException e) { e.printStackTrace(); }
catch (UnknownHostException e) { e.printStackTrace(); }
catch (IOException e) { e.printStackTrace(); }
} else if (str.equals("CC")){
try {
operator_socket.getOutputStream().write("EX".getBytes("US-ASCII"));
operator_socket.close();
} catch (UnsupportedEncodingException e) { e.printStackTrace(); }
catch (UnknownHostException e) { e.printStackTrace(); }
catch (IOException e) { e.printStackTrace(); }
} else {
}
return null;
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
conn new_conn = new conn();
public void connect_operator(View v){
new_conn.execute("conn");
}
public void close_conn(View v){ new_conn.execute("CC"); }
}
您只能在 AsyncTask 的一个实例上调用一次执行。 new_conn
仅被初始化一次。现在如果每次调用execute都尝试创建一个新对象,将无法使用operator_socket
Socket变量作为AsyncTaskclass的成员变量。在 AsyncTask
的单个实例上多次调用执行时出现异常
我是 android 的新手,我正在尝试在 android 中实现 socket
它是一个简单的客户端-服务器应用程序。
我在其中创建了 2 buttons
("connect"、"disconnect"),并使用 AysncTask doInBackground
我正在连接到服务器并与服务器断开连接,但它仅适用于连接,不幸的是,当我试图断开我的应用程序关闭时。
下面是我的 mainactivity
代码。
感谢您的帮助
package com.example.sockettest;
import androidx.appcompat.app.AppCompatActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import java.io.*;
import java.util.*;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.lang.String;
class conn extends AsyncTask<String, Void, Void>{
Socket operator_socket;
@Override
protected Void doInBackground(String... voids) {
String str;
str = voids[0];
if (str.equals("conn")) {
try {
operator_socket = new Socket("192.168.0.103", 6666);
}catch (UnsupportedEncodingException e) { e.printStackTrace(); }
catch (UnknownHostException e) { e.printStackTrace(); }
catch (IOException e) { e.printStackTrace(); }
} else if (str.equals("CC")){
try {
operator_socket.getOutputStream().write("EX".getBytes("US-ASCII"));
operator_socket.close();
} catch (UnsupportedEncodingException e) { e.printStackTrace(); }
catch (UnknownHostException e) { e.printStackTrace(); }
catch (IOException e) { e.printStackTrace(); }
} else {
}
return null;
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
conn new_conn = new conn();
public void connect_operator(View v){
new_conn.execute("conn");
}
public void close_conn(View v){ new_conn.execute("CC"); }
}
您只能在 AsyncTask 的一个实例上调用一次执行。 new_conn
仅被初始化一次。现在如果每次调用execute都尝试创建一个新对象,将无法使用operator_socket
Socket变量作为AsyncTaskclass的成员变量。在 AsyncTask