Отправка данных с клиента на настольный сервер

Я пытаюсь отправить дату от Android приложение в качестве клиентской стороны к NetBeans приложение на рабочем столе в качестве серверной части, соединение работает просто отлично, даже отправка данных, но это было до того, как я обновил свой Android IDE до версии 3!

Теперь, когда я пытаюсь отправить данные, я получаю следующее исключение:

android.os.NetworkOnMainThreadException

Теперь я увидел пост здесь Stackru... этот, и я получил его, потому что отправка данных происходит в главном потоке, но я не использую основной поток для отправки данных, и я все еще получаю это ошибка каждый раз, когда я пытаюсь отправить данные.


Пояснение к коду: у меня есть два метода, которые отправляют данные, один для отправки данных только один раз после установления соединения, а второй - для отправки данных в любое время, теперь мой первый находится в главном потоке, но второй в другом потоке, исключение никогда не встречается в первом, но всегда будет во втором, я слышал, что одним из решений является использование AsyncTask и я использовал это на втором, и теперь я получаю плату большую часть времени, но не всегда.


Вот мой код для лучшего понимания:

Это первый метод, который запускается только один раз и в основном потоке, и он всегда будет работать:

private void SendInformation(){
    try{
        OutPut = new BufferedWriter(new OutputStreamWriter(ConnectionSocket.getOutputStream(), "UTF-8"));
        OutPut.write(android.os.Build.MODEL);
        OutPut.newLine();
        OutPut.flush();
    }catch(Exception e){
        e.printStackTrace();
    }
}

Это мой второй с потоком, и это всегда дает исключение:

public static void SendDetails(String S1, String S2){
    Handler handler = new Handler();

    handler.postDelayed(new Runnable(){

        public void run(){
            try{
                OutPut = new BufferedWriter(new OutputStreamWriter(ConnectionSocket.getOutputStream(), "UTF-8"));
                OutPut.write(S1 + "," + S2);
                OutPut.newLine();
                OutPut.flush();
            }catch(Exception e){
                e.printStackTrace();
                MainActivity.ErrorMessage.setText(e.toString());
            }
        }
    }, Delay * 1000);
}

И это тот же второй раз, но с использованием AsyncTask:

private static SendInfoTask SIT = new SendInfoTask();

public static void SendDetails(String S1, String S2){
    Handler handler = new Handler();

    handler.postDelayed(new Runnable(){

        public void run(){
            SIT.execute();
        }
    }, Delay * 1000);
}

static class SendInfoTask extends AsyncTask<Void, Void, Void> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... params) {
        try{
            OutPut = new BufferedWriter(new OutputStreamWriter(ConnectionSocket.getOutputStream(), "UTF-8"));
            OutPut.write(Client.AppName + "," + Client.NotificationText);
            OutPut.newLine();
            OutPut.flush();
        }catch(Exception e){
            e.printStackTrace();
            MainActivity.ErrorMessage.setText(e.toString());
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
    }
}

Иногда это работает, а иногда нет, и когда это работает, после попытки отправить, как 5 раз, все приложение падает!

Может кто-нибудь, пожалуйста, помогите мне? Как лучше всего делать то, что я пытаюсь сделать? (ценю любую помощь)

0 ответов

Другие вопросы по тегам