>
Boa tarde!
Estou tentando salvar a foto em uma pasta no servidor e a string da foto no banco de dados, mas infelizmente não estou conseguindo. Eu acredito que seja algum erro no código em php. Logo abaixo
package br.com.rlsystem.chat;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Environment;
import android.os.PersistableBundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import com.google.gson.JsonObject;
import com.koushikdutta.async.future.FutureCallback;
import com.koushikdutta.ion.Ion;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import br.com.rlsystem.chat.Util.ImagePicker;
/**
* Created by alison on 17/11/16.
*/
public class CadastroActivity extends AppCompatActivity {
public static final int REQUEST_DIALOG_PHOTO = 1; // Identifica a chamada
// Validação para a foto
private int havePhoto = 0;
private String photoFile;
private ImageView imgUsuario;
private EditText edtNomeUsuario;
private EditText edtEmailUsuario;
private EditText edtSenhaUsuario;
private EditText edtConfirmeSenhaUsuario;
private Button btnCadastrarUsuario;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cadastro);
init();
}
public void init(){
imgUsuario = (ImageView) findViewById(R.id.imgUsuario);
edtNomeUsuario = (EditText) findViewById(R.id.edtNomeUsuario);
edtEmailUsuario = (EditText) findViewById(R.id.edtEmailUsuario);
edtSenhaUsuario = (EditText) findViewById(R.id.edtSenhaUsuario);
edtConfirmeSenhaUsuario = (EditText) findViewById(R.id.edtConfirmeSenhaUsuario);
btnCadastrarUsuario = (Button) findViewById(R.id.btnCadastrarUsuario);
}
public void cadastrarUsuario(View view){
/*
Esta variável "error" serve para não deixar o usuário salvar sem nenhum campo preenchido.
Porque mesmo você colocando essas retrições de que precisa preencher os campos, o usuário
consegue cadastrar... Se ele clicar em cadastrar cadastra, mas sem nenhum dado.
*/
int error = 0;
if (edtNomeUsuario.getText().toString().equals("")){
edtNomeUsuario.setError("Preencha o campo nome.");
edtNomeUsuario.requestFocus();
error = 1;
} else if (edtEmailUsuario.getText().toString().equals("")){
edtEmailUsuario.setError("Preencha o campo email.");
edtEmailUsuario.requestFocus();
error = 1;
} else if (edtSenhaUsuario.getText().toString().equals("")){
edtSenhaUsuario.setError("Preencha o campo senha.");
edtSenhaUsuario.requestFocus();
error = 1;
} else if (edtConfirmeSenhaUsuario.getText().toString().equals("")){
edtConfirmeSenhaUsuario.setError("Preencha o campo confirme sua senha");
edtConfirmeSenhaUsuario.requestFocus();
error = 1;
} else if (!edtConfirmeSenhaUsuario.getText().toString().equals(edtSenhaUsuario.getText().toString())){
Toast.makeText(CadastroActivity.this, "A primeira senha não bate com a segunda", Toast.LENGTH_SHORT).show();
edtConfirmeSenhaUsuario.requestFocus();
error = 1;
} else if (havePhoto == 0){
Toast.makeText(CadastroActivity.this, "Por favor, selecione uma foto", Toast.LENGTH_SHORT).show();
error = 1;
}
// Só cadastra se não tiver nenhum erro
if (error == 0){
String URL = "http://192.168.0.103/chat/insert_user.php";// endereço da url
try{
// String onde esta a foto
photoFile = getBaseContext().getPackageManager().getPackageInfo(getBaseContext().getPackageName(),0).applicationInfo.dataDir + "//photo//perfil.png";
} catch (PackageManager.NameNotFoundException e){
}
// Passando os parametros para a página em php, através do Ion
Ion.with(getBaseContext())
.load(URL)
.setMultipartParameter("nome_user", edtNomeUsuario.getText().toString())
.setMultipartParameter("email_user", edtEmailUsuario.getText().toString())
.setMultipartParameter("senha_user", edtSenhaUsuario.getText().toString())
.setMultipartFile("photo_user", new File(photoFile))
.asJsonObject()
.setCallback(new FutureCallback() {
@Override
public void onCompleted(Exception e, JsonObject result) {
// Se o retorno for yes
if (result.get("retorno").getAsString().equals("YES")){
// Quando completar esse processo
Toast.makeText(CadastroActivity.this, "Cadastro realizado com sucesso", Toast.LENGTH_SHORT).show();
} else if (result.get("retorno").getAsString().equals("EMAIL_ERROR")){
edtEmailUsuario.setError("Email já cadastrado");
edtEmailUsuario.requestFocus();
} else if (result.get("retorno").getAsString().equals("NO")){
Toast.makeText(CadastroActivity.this, "Cadastro não realizado", Toast.LENGTH_SHORT).show();
}
}
});
}
}
public void tirarFoto(View view){
//imgUsuario.setImageResource(android.R.color.transparent); // Resetando a foto
Intent chamaCamera = ImagePicker.getPickImageIntent(getBaseContext());//Usando a classe imagePicker
startActivityForResult(chamaCamera, REQUEST_DIALOG_PHOTO);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_DIALOG_PHOTO){// Se for intent da camera
if (resultCode == Activity.RESULT_OK){// Se o usuário escolheu uma foto
//Pega a foto e transforma em bitmap
Bitmap photoUser = ImagePicker.getImageFromResult(getBaseContext(), resultCode, data);
imgUsuario.setImageBitmap(photoUser);// Seta no imageView
havePhoto = 1;
// Grava foto pasta
/* Vai ficar desse jeito
/data/data/br.com.rlsystem.chat/photo
*/
File diretorio = Environment.getDataDirectory(); // Pegando o diretorio data
String enderecoPhoto = "//data//" + getBaseContext().getPackageName() + "//photo//";
diretorio = new File(diretorio, enderecoPhoto);
diretorio.mkdirs(); // Criando diretório
OutputStream out = null;
File outputFile = new File(diretorio, "perfil.png"); // Criei um arquivo
try{
out = new FileOutputStream(outputFile); // Grava a foto
photoUser.compress(Bitmap.CompressFormat.PNG, 100, out); // Vai comprimir a imagem e deixar no out
out.flush();
out.close();
} catch (Exception e){
}
} else {
Toast.makeText(CadastroActivity.this, "Foto não selecionada", Toast.LENGTH_SHORT).show();
}
}
}
}
if (!isset($_POST["nome_user"])){
exit();
}
$nome_user = $_POST["nome_user"];
$email_user = $_POST["email_user"];
$senha_user = $_POST["senha_user"];
$photo_user_origem = $_FILES["photo_user"]["tmp_name"];
$photo_user_destino = "photos/".md5(time())."png";
$data_user = date("Y-m-d H:i:s");
$conn = new mysqli("localhost", "root", "", "chat"); // Criei uma conexão
$sql_verifica = 'SELECT email_usuario FROM usuarios WHERE email_usuario = "'.$email_user.'"';// CONSULTA
$exec_row = $conn->query($sql_verifica);// RETORNOU ALGUM REGISTRO?
if ($exec_row->num_rows == 0){
$sql_insert = 'INSERT INTO usuarios (nome_usuario, email_usuario, senha_usuario, data_usuario, photo_usuario) ';
$sql_insert .= 'VALUES (?, ?, ?, ?)';
$stm = $conn->prepare($sql_insert);
$stm->bind_param("sssss", $nome_user, $email_user, $senha_user, $data_user, $photo_user_destino);
// Retornando o resultado em json
if ($stm->execute()){
$idUser = $conn->insert_id;
$stm->close();
if (move_uploaded_file($photo_user_origem, $photo_user_destino)){
$sql_update_photo = 'UPDATE usuarios SET photo_usuario = ? WHERE id_usuario = ?';
$stm = $conn->prepare($sql_update_photo);
$stm->bind_param("si", $photo_user_destino, $idUser);
$stm->execute();
}
//$stm->close();
$retorno = array("retorno" => 'YES');
} else {
$retorno = array("retorno" => 'NO');
}
} else {
$retorno = array("retorno" => 'EMAIL_ERROR');
}
echo json_encode($retorno);
$stm->close();
$conn->close();
?>
Alison
O update de dentro do if do uploaded_file está funcionando?
Ele gera algum erro?
Mais Alison onde esta o código que envia a foto para o Servidor?
Eu tenho uma rotina que envia dados para o Servidor, no meu caso meu Servidor é em Java, e eu faço uso do Retrofit para o envio e recebimento ou seja para comunicação entre o dispositivo Móvel e o Servidor me dê mais detalhes ai que tento dar uma força, ou segue o meu Skype robson.lira
Alison
Como não houve retorno, o tópico foi fechado.
Qualquer dúvida ficamos a disposição.
Obrigada