Как вызвать внутренний класс AsyncTask ObjectOutputStream в другом Java-классе для отправки команды на сервер - PullRequest
0 голосов
/ 29 января 2019

Я создаю клиент-серверное приложение, клиент (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-классе, чтобы отправить команду на сервер, пока он подключен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...