Я создаю клиент-серверное приложение, клиент (android) и сервер (netbeans).Я создаю удаленное приложение, но столкнулся с некоторой проблемой при отправке команды на сервер.Я использую AsyncTask doInBackground, чтобы установить соединение с сокетом и objectoutputstream.Как мне вызвать objectoutputstream в AsyncTask, чтобы отправить мою команду на сервер в другой деятельности класса Java.
public class WiFi extends AppCompatActivity {
public int port = 6000;
public Socket conSocket;
public static String serverIP;
public EditText password;
public ObjectOutputStream oos;
public ObjectInputStream ois;
TextView pinginfo;
введите здесь код String TAG = "WiFi";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wi_fi);
Button auth = findViewById(R.id.btn_auth);
Button con = findViewById(R.id.wifi_connect);
password = findViewById(R.id.ET_Password);
password.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
if (password.getText().toString().trim().length() < 6) {
password.setError("Please enter minimum of 6 digits.");
} else {
password.getText().toString();
}
}
}
});
auth.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
authenticate();
}
});
con.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DoinBG bg = new DoinBG(conSocket, oos);
bg.execute();
}
});
}
public void authenticate() {
serverIP = ((EditText) findViewById(R.id.IPAddr)).getText().toString();
Log.d(TAG, "Pinging " + serverIP + " ...");
pinginfo = findViewById(R.id.PingInfo);
try {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitNetwork().build();
StrictMode.setThreadPolicy(policy);
if (InetAddress.getByName(serverIP).isReachable(2000)) {
Log.d(TAG, "Ping " + serverIP + " OK");
pinginfo.setText("Pinging " + serverIP + " OK\n");
} else {
pinginfo.setText("Pinging " + serverIP + " FAIL\n");
Log.d(TAG, "Ping " + serverIP + " FAIL");
}
} catch (IOException e) {
e.printStackTrace();
}
}
public class DoinBG extends AsyncTask<String, Void, Runnable> implements Runnable {
boolean connect = true;
ObjectOutputStream oos ;
ObjectInputStream ois;
Socket conSocket;
public DoinBG(Socket conSocket, ObjectOutputStream oos) {
MCMMenu menu = new MCMMenu();
}
@Override
protected Runnable doInBackground(String... voids) {
serverIP = ((EditText) findViewById(R.id.IPAddr)).getText().toString();
if (password.getText().toString().trim().length() < 6) {
password.setError("Please enter minimum of 6 digits for
password.");
} else {
try {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitNetwork().build();
StrictMode.setThreadPolicy(policy);
conSocket = new Socket(serverIP, port);
Log.d(TAG, "Run connection.");
run();
new DoinBG(conSocket, oos);
} catch (IOException e) {
e.printStackTrace();
Log.d(TAG, "Cannot connect to the server port " + port);
conSocket = null;
Intent notconnected =
new Intent(getApplicationContext(), MainActivity.class);
startActivity(notconnected);
} catch (Exception e) {
Log.d(TAG, "Unknown error " + e);
conSocket = null;
Intent notconnected = new Intent(getApplicationContext(), MainActivity.class);
startActivity(notconnected);
}
}
return null;
}
public void run() {
try {
while(connect){
Log.d(TAG, "Sending password.");
oos = new ObjectOutputStream(conSocket.getOutputStream());
ois = new ObjectInputStream(conSocket.getInputStream());
String msg;
if (oos != null) {
oos.writeObject(password.getText().toString());
oos.flush();
} else {
oos.flush();
oos.close();
}
Intent connected = new Intent(WiFi.this, MCMMenu.class);
startActivity(connected);
if (ois != null) {
msg = (String) ois.readObject();
Log.d(TAG, "Server: " + msg);
if (msg.equalsIgnoreCase("quit")) {
quit();
Toast.makeText(getApplicationContext(), "Incorrect Password.", Toast.LENGTH_LONG).show();
Intent disconnected = new Intent(WiFi.this, MainActivity.class);
startActivity(disconnected);
}
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally{
try{
conSocket.close();
Toast.makeText(getApplicationContext(), "Device Disconnected.", Toast.LENGTH_LONG).show();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
public void quit() {
try {
oos.writeObject("LOGOUT");
oos.flush();
oos.close();
ois.close();
conSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Как мне вызвать objectoutputstream в другом Java-классе, чтобы отправить команду на сервер, пока он подключен.