android ftp android-asynctask return-value

android - Leer el archivo de texto de un servidor ftp y devolverlo desde AsyncTask



android-asynctask return-value (3)

Tengo un txt file en mi ftp server . Y todo lo que quiero hacer es leer ese archivo, recuperar el contenido y guardarlo como una cadena usando AsyncTask . Según entiendo desde el logcat, puedo conectar el ftp server y puedo cambiar el directorio. Pero no puedo leer el contexto del archivo de texto, y no sé cómo devolverlo desde la clase AsyncTask .

Y estos son mis códigos:

MainActivity.java

package com.example.ftpdenemeleri; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FtpAsync task1 = new FtpAsync(); task1.execute(); } }

FtpAsync.java

package com.example.ftpdenemeleri; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPCmd; import android.os.AsyncTask; public class FtpAsync extends AsyncTask <Void, Void, String>{ @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(Void... params) { // TODO Auto-generated method stub FTPClient ftpClient = new FTPClient(); try { ftpClient.connect("hostname", 21); System.out.println(ftpClient.getReplyString()); ftpClient.sendCommand(FTPCmd.USER, "user"); System.out.println(ftpClient.getReplyString()); ftpClient.sendCommand(FTPCmd.PASS, "pass"); System.out.println(ftpClient.getReplyString()); ftpClient.sendCommand(FTPCmd.CWD, "/home/www/bitirme"); InputStream is = new BufferedInputStream(ftpClient.retrieveFileStream("beaglesays.txt")); System.out.println("Input Stream has opened."); } catch (IOException ex) { System.err.println(ex); } return null; } protected void onPostExecute() { // TODO: check this.exception // TODO: do something with the feed } }


Hay muchas maneras de leer completamente un InputStream en una cadena. El más fácil sería usar IOUtils.toString() de Apache Commons IO .

Entonces, asumiendo eso, los cambios serían devolver dicha cadena de doInBackground() y recibirla en onPostExecute() .


Intenta comprender AsyncTask claramente. Pocas cosas: (1) Pregunta similar: Cómo hacer un simple archivo ftp get en Android (2) Una vez que obtiene contenido en doInBackground () - devuelve el contenido como String (en este momento está devolviendo null). (3) Agregue el parámetro en onPostExecute (String result) y este será el contenido del archivo.


Tu código debe ser como:

package com.example.ftpdenemeleri; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPCmd; import android.os.AsyncTask; public class FtpAsync extends AsyncTask <Void, Void, String>{ @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(Void... params) { // TODO Auto-generated method stub FTPClient ftpClient = new FTPClient(); try { ftpClient.connect("hostname", 21); System.out.println(ftpClient.getReplyString()); ftpClient.sendCommand(FTPCmd.USER, "user"); System.out.println(ftpClient.getReplyString()); ftpClient.sendCommand(FTPCmd.PASS, "pass"); System.out.println(ftpClient.getReplyString()); ftpClient.sendCommand(FTPCmd.CWD, "/home/www/bitirme"); InputStream is = new BufferedInputStream(ftpClient.retrieveFileStream("beaglesays.txt")); System.out.println("Input Stream has opened."); Scanner s = new Scanner(is).useDelimiter("//A"); // Convert your stream into string return s.hasNext() ? s.next() : ""; //send the string to onPostExecute() } catch (IOException ex) { System.err.println(ex); } return null; } protected void onPostExecute(String result) { // TODO: check this.exception // TODO: do something with the feed Log.i("Result : ",result); } }