AsyncTask类中的startActivityForResult和onActivityResult

时间:2018-05-13 12:42:22

标签: android android-asynctask ftp onactivityresult startactivityforresult

我想在FTP中推送图库的图像,我正在使用FTPClient类,我正在尝试创建一个活动来获取图像,但我找不到解决方案。 / p>

我用它来创建活动:

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.");
}

}

0 个答案:

没有答案