startActivityForResult и onActivityResult в классе AsyncTask - PullRequest
0 голосов
/ 13 мая 2018

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

Я использую это для создания действия:

public void abrirGaleria(){
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    ((Activity) context).startActivityForResult(
            Intent.createChooser(intent, "Seleccione una imagen"),
            SELECT_FILE);
}

И я пытаюсь использовать это, чтобы получить результат.Но я не могу назвать super.onActivityResult, потому что класс расширяется от AsyncTask

protected void onActivityResult(int requestCode, int resultCode,
                                Intent imageReturnedIntent) {
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
    Uri selectedImageUri = null;
    Uri selectedImage;

    String filePath = null;
    switch (requestCode) {
        case SELECT_FILE:
            if (resultCode == Activity.RESULT_OK) {
                selectedImage = imageReturnedIntent.getData();
                String selectedPath=selectedImage.getPath();
                if (requestCode == SELECT_FILE) {
                    if (selectedPath != null) {
                        rutaCompleta = new File(selectedPath);
                    }
                }
            }
            break;
    }
}

Что я могу сделать?

Весь мой класс:

public class FTPSubir extends AsyncTask<Void , Integer, Long> {
private static final int SELECT_FILE = 1;
private String ip;                //Almacena la dirección del servidor
private String usuario;            //Almacena el nombre de usuario
private String contrasena;        //Almacena la contraseña del usuario
FTPClient ftpClient;            //Crea la conexión con el servidor
BufferedInputStream bufferIn;   //Crea una buffer de lectura
BufferedOutputStream bufferOut; //Crea una buffer de escritura
File rutaCompleta;                //Almacena la ruta completa del archivo
Context context;                //Almacena el contexto de la aplicacion
String nombreArchivo;

/**
 * Crea una instancia de FTP sin credenciales
 */
public FTPSubir(String ip, Context context) {

    //Inicialización de campos
    this.ip = ip;
    usuario = USUARIO;
    contrasena = PASS;

    ftpClient = null;
    bufferIn = null;
    bufferOut = null;
    rutaCompleta = null;

    this.context = context;
}
/**
 * Obtiene el nombre de usuario
 * @return  El nombre de usuario
 */
public String getUsuario() {
    return usuario;
}

/**
 * Establece el nombre de usuario
 * @param usuario   El nombre de usuario
 */

public void setUsuario(String usuario) {
    this.usuario = usuario;
}

/**
 * Obtiene la contraseña de usuario
 * @return  La contraseña de usuario
 */

public String getContrasena() {
    return contrasena;
}

/**
 * Establece la contraseña de usuario
 * @param contrasena    La contraseña de usuario
 */

public void setContrasena(String contrasena) {
    this.contrasena = contrasena;
}

/**
 * Realiza el login en el servidor
 * @return  Verdad en caso de haber realizado login correctamente
 * @throws SocketException
 * @throws IOException
 */
public boolean login () throws IOException {
    //Establece conexión con el servidor
    System.out.println("Conectando . . .");
    try{
        ftpClient = new FTPClient();
        ftpClient.connect(ip);
    }
    catch (Exception e){
        e.printStackTrace();
        //Informa al usuario
        System.out.println("Imposible conectar . . .");
        return false;   //En caso de que no sea posible la conexion
    }
    //Hace login en el servidor
    ftpClient.enterLocalPassiveMode();

    if (ftpClient.login(usuario, contrasena)){
        //Informa al usuario
        System.out.println("Login correcto . . .");
        return true;    //En caso de login correcto
    }
    else{
        //Informa al usuario
        System.out.println("Login incorrecto . . .");
        return false;   //En caso de login incorrecto
    }
}

/**
 *  Sube un archivo al servidor FTP si previamente se ha hecho login correctamente
 * @return  Verdad en caso de que se haya subido con éxito
 * @throws IOException
 */
public boolean SubirArchivo () throws IOException{

    ftpClient.enterLocalActiveMode();
    ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

    //Cambia la carpeta Ftp
    if (ftpClient.changeWorkingDirectory("ftp")){

        //Informa al usuario
        System.out.println("Carpeta ftp cambiada . . .");

        //Crea un buffer hacia el servidor de subida
        bufferIn = new BufferedInputStream(new FileInputStream(rutaCompleta));

        if (ftpClient.storeFile(rutaCompleta.getName(), bufferIn)){
            //Informa al usuario
            System.out.println("Archivo subido . . .");
            bufferIn.close();       //Cierra el bufer
            return true;        //Se ha subido con éxito
        }
        else{
            //Informa al usuario
            System.out.println("Imposible subir archivo . . .");
            bufferIn.close();       //Cierra el bufer
            return false;       //No se ha subido
        }
    }
    else{
        //Informa al usuario
        System.out.println("Carpeta ftp imposible cambiar . . .");
        return false;       //Imposible cambiar de directo en servidor ftp
    }
}

public void abrirGaleria(){
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    ((Activity) context).startActivityForResult(
            Intent.createChooser(intent, "Seleccione una imagen"),
            SELECT_FILE);
}

protected void onActivityResult(int requestCode, int resultCode,
                                Intent imageReturnedIntent) {
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
    Uri selectedImageUri = null;
    Uri selectedImage;

    String filePath = null;
    switch (requestCode) {
        case SELECT_FILE:
            if (resultCode == Activity.RESULT_OK) {
                selectedImage = imageReturnedIntent.getData();
                String selectedPath=selectedImage.getPath();
                if (requestCode == SELECT_FILE) {
                    if (selectedPath != null) {
                        rutaCompleta = new File(selectedPath);
                    }
                }
            }
            break;
    }
}

@Override
protected Long doInBackground(Void... voids) {
    try {
        login();
        abrirGaleria();
        SubirArchivo();
    } catch (IOException e) {
        e.printStackTrace();
        System.out.println("Imposible conectar . . .");
    }
    return null;
}

@Override
protected void onPostExecute(Long result) {
    //Termina proceso
    Log.i("TAG" , "Termina proceso de lectura de archivos.");
}

}

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