Я получаю «Фоновая липкая одновременная метка развертки G» в журналах, и тогда ничего не происходит - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь подключиться к FTP-серверу и отображать данные в моем приложении для Android после извлечения его с сервера, но мне не удалось это выяснить.Я сталкиваюсь с вышеупомянутой проблемой.Класс FTPDownloader находится внутри класса MainActivity, и я вызываю его с помощью new FTPDownloader (). Execute (); .Я вызываю doInBackground () для FTPDownloader () после нажатия кнопки в классе MainActivity.Но ничего не происходит, как будто метод doInBackground () никогда не запускался.Приложение не зависает, но ничего не происходит.Спасибо заранее, любая помощь приветствуется.

   private class FTPDownloader extends AsyncTask<Void, Void, Void> {

        FTPClient ftp = null;
        InputStream in;

        public FTPDownloader() {
            ftp = null;
        }


        public void disconnect() {
            if (this.ftp.isConnected()) {
                try {
                    this.ftp.logout();
                    this.ftp.disconnect();
                } catch (IOException f) {
                    // do nothing as file is already downloaded from FTP server
                }
            }
        }

        @Override
        protected Void doInBackground(Void... voids) {
            try {

                ftp = new FTPClient();
                ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
                int reply;
                ftp.connect("12.123.12.123");
                reply = ftp.getReplyCode();
                if (!FTPReply.isPositiveCompletion(reply)) {
                    ftp.disconnect();
                    throw new Exception("Exception in connecting to FTP Server");
                }
                ftp.login("user1234","1234" );
                ftp.setFileType(FTP.BINARY_FILE_TYPE);
                ftp.enterLocalPassiveMode();
                in = ftp.retrieveFileStream("filePath");


            } catch (Exception e) {
                e.printStackTrace();
                Log.i("FTP", "Error Occurred.");

            }
             try {

                int data = in.read();

                while (data != -1) {
                    String s = "";
                    char ch = (char) data;
                    if (ch != ',') {
                        s = s + ch;
                    } else {
                        s = s + " ";
                        gblprpd.add(s);
                        data = in.read();
                    }
                }
                in.close();

                for (int i = 0; i < gblprpd.size(); ++i) {
                    String s = "";
                    for (int j = 0; j < 9; ++j) {
                        ++i;
                        s = s + gblprpd.get(i);
                    }

                    dta.add(s);
                }
            } catch (IOException e) {
                e.printStackTrace();
                Log.i("FTP", "Error Occurred");

            }

            disconnect();
            return null;
        }

        @Override
        protected void onPreExecute()
        {

        }

        @Override
        protected void onPostExecute(Void cd) {


                    TextView output = (TextView) findViewById(R.id.output);
                    output.setText("Data Retrieved:");
                    for (int k = 0; k < dta.size(); ++k) {
                        roes.get(k + 1).setText(dta.get(k));
                    }
                    for (int k = dta.size() + 1; k < 16; ++k)
                        roes.get(k).setVisibility(View.GONE);
                    ScrollView sv = (ScrollView) findViewById(R.id.sv);
                    sv.setVisibility(View.VISIBLE);
                    HorizontalScrollView hsv = (HorizontalScrollView) findViewById(R.id.hsv);
                    hsv.setVisibility(View.VISIBLE);


    }
}


}

Журналы:

06-12 21:08:30.797 23404-23469/com.example.quickstart I/System.out: 220 Microsoft FTP Service
06-12 21:08:30.800 23404-23469/com.example.quickstart I/System.out: USER user1234
06-12 21:08:30.861 23404-23469/com.example.quickstart I/System.out: 331 Password required
06-12 21:08:30.862 23404-23469/com.example.quickstart I/System.out: PASS 1234
06-12 21:08:30.936 23404-23469/com.example.quickstart I/System.out: 230 User logged in.
06-12 21:08:30.938 23404-23469/com.example.quickstart I/System.out: TYPE I
06-12 21:08:31.018 23404-23469/com.example.quickstart I/System.out: 200 Type set to I.
06-12 21:08:31.019 23404-23469/com.example.quickstart I/System.out: PASV
06-12 21:08:31.082 23404-23469/com.example.quickstart I/System.out: 227 Entering Passive Mode (14,141,70,165,66,149).
06-12 21:08:31.145 23404-23469/com.example.quickstart I/System.out: RETR File\Path
06-12 21:08:31.213 23404-23469/com.example.quickstart I/System.out: 125 Data connection already open; Transfer starting.
06-12 21:08:46.814 23404-23415/com.example.quickstart I/art: Background sticky concurrent mark sweep GC freed 910864(25MB) AllocSpace objects, 0(0B) LOS objects, 27% free, 29MB/40MB, paused 1.234ms total 106.681ms
06-12 21:08:46.976 23404-23415/com.example.quickstart I/art: Background sticky concurrent mark sweep GC freed 926388(25MB) AllocSpace objects, 0(0B) LOS objects, 28% free, 29MB/40MB, paused 1.118ms total 104.876ms

Пожалуйста, помогите, любая помощь приветствуется.Заранее спасибо

1 Ответ

0 голосов
/ 12 июня 2018

Вы читаете байты с FTP-соединения в onPostExecute().onPostExecute() запускается в главном потоке приложения.Следовательно, вы выполняете сетевой ввод-вывод в главном потоке приложения.

Переместите все вашего кода, который использует FTP-соединение, в doInBackground().Используйте загруженные данные в onPostExecute().

Также обратите внимание, что вам не нужно runOnUiThread() в onPostExecute(), так как onPostExecute() уже выполняется в потоке основного приложения ("UI").

...