Capturar imagem e enviar p/ web service Java

3 respostas
java
J

Ola sou novo aqui no GUJ e primeiramente gostaria de agradecer a oportunidade de pedir uma ajuda…

Estou a um ano tentando concluir meu tcc por q estou com problemas ao enviar a imagem por Json via post. A ideia seria capturar uma foto e fazer o envio da mesma para um web service java q retorna uma String para o aplicativo. Abaixo o codigo do app e meu web service.

Abaixo minha Main

private static final int CAMERA_REQUEST = 1888;
private ImageView recuperaImagem;

private Button btEnviar;
private Button btCamera;

private String temporario;

<a class="mention" href="/u/override">@Override</a>

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btEnviar = (Button) findViewById(R.id.btEnviar);

btEnviar.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

ProgressDialog dialog = ProgressDialog.show(MainActivity.this, “Aguarde”, “Enviando Dados, Por Favor Aguarde…”);

try {

JsonSet jsonSet = new JsonSet(getApplicationContext(),“<a href="http://192.168.56.1:8080/Web/webresources/webservice/nome">http://192.168.56.1:8080/Web/webresources/webservice/nome</a>”,dialog);

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

}
});

//******************************** camera **************************************************

btCamera = (Button) findViewById(id.btCamera);
recuperaImagem=(ImageView) findViewById(id.recuperaImagem);

btCamera.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent,CAMERA_REQUEST);

}
});

}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
Bitmap photo = (Bitmap) data.getExtras().get(“data”);

recuperaImagem.setImageBitmap(photo);

Dados dados = new Dados();

String imgString = BitMapToString(photo);

dados.setImagem(photo);

}
}

public String BitMapToString(Bitmap bitmap) {

ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.WEBP, 100, baos);

byte[] b = baos.toByteArray();

String temp = Base64.encodeToString(b, Base64.NO_WRAP);

return temp;

}

abaixo a classe responsavel pelo envio

public class JsonSet extends Activity{

private String url;

private ProgressDialog dialog;

private String parametro;

private Thread thread = null;

private Context context = null;

private String erro = “Nenhum”;

String resultado= null;
public JsonSet(Context context, String url, ProgressDialog dialog) throws UnsupportedEncodingException {

this.dialog = dialog;

this.context = context;

this.url = url;

new SetCobranca().execute();
}

private class SetCobranca extends AsyncTask<String, String, String> {

protected void onPostExecute(String result){ // String result

if (dialog != null){

dialog.dismiss();

}
try {

if (result.equalsIgnoreCase(“Erro”)) {

Toast toast = Toast.makeText(context, “Erro ao enviar post.”, Toast.LENGTH_LONG);

toast.show();

} else if (result.equalsIgnoreCase(Nenhum)) {

Toast toast = Toast.makeText(context, “Nenhum post para ser enviado”, Toast.LENGTH_LONG);

toast.show();

} else {

Toast toast = Toast.makeText(context, "Akuma "+resultado, Toast.LENGTH_LONG);

toast.show();

}

}catch (Exception e){

System.out.println("erro aqui: "+ e.getMessage());

}

}

@Override
protected String doInBackground(String… params) {

JSONArray jsonArray = new JSONArray();

try {

//jsonArray.put(“teste”);

Dados dados = new Dados();
Gson g = new Gson();

JsonObject foto = new JsonObject();

String json = g.toJson(dados);// converte o objeto em json

jsonArray.put(dados.getImagem());

} catch (Exception e) {

<a href="//System.out.println">//System.out.println</a>(e.getMessage());

e.printStackTrace();

}

String result = null;

if (jsonArray.length() > 0) {
try {

URL urlCon = new URL(url);

HttpURLConnection conn = (HttpURLConnection) urlCon.openConnection();

conn.setConnectTimeout(50000);

conn.setRequestMethod(POST);

conn.setRequestProperty(Accept, application/json);

conn.setRequestProperty(Content-type, application/json);

conn.setDoInput(true);

conn.setDoOutput(true);

conn.connect();

OutputStream os = conn.getOutputStream();

BufferedWriter writer = new BufferedWriter(

new OutputStreamWriter(os, UTF-8));

writer.write(jsonArray.toString());

writer.flush();

writer.close();

os.close();
BufferedReader reader = new BufferedReader(new InputStreamReader(

conn.getInputStream()));

StringBuilder sb = new StringBuilder();

String line = null;
while ((line = reader.readLine()) != null) {

sb.append(line);

}

result = sb.toString();

resultado = result; // recebe o resultado do web service

erro = “Sucesso”;

} catch (Exception e){

<a href="//System.out.println">//System.out.println</a>("Erro: "+ e.getMessage());

erro = “Erro”;

e.printStackTrace();
} catch (ExceptionInInitializerError ex){

erro = Erro;

ex.printStackTrace();

}

}else{

erro = Nenhum;

}

return erro;

}

}
public void PauseThread(){

if (thread != null) {

thread.interrupt();

}

}

}

web service java

@POST

@Consumes(“application/json”)

<a class="mention" href="/u/path">@Path</a>(“nome”)

public String putJson (String nome){

/*

Gson gson = new Gson();

gson.toJson(nome);

*/

System.out.print(nome);

return (“Sucesso”+nome);

obs: Strings sao enviadas normalmente

3 Respostas

me1

Fala Jow.

1º Você tem certeza que o web service está funcionando?
Já existe alguma aplicação usando esse serviço?

Caso sim, faça o seguinte:

  • Troque o trecho código e.printStackTrace(); por Log.e("TAG", e.getMessage(), e);
  • Execute o aplicativo novamente, depois posta o código de erro que vai ser impresso no Log pra gente ver o que está acontecendo.
J

Entao fera. antes agradeço o esforço em me responder aqui…

Entao, o web service foi eu q fiz e o unico teste q fiz foi implantar ele ne e testar no navegador e quando mando alguma string p ele pelo aplicativo e ele retorna sucesso.
Ele esta recebendo, so que quando mando a foto esta chegando null.

fiz o teste que pediu

04-06 21:42:00.331: D/dalvikvm(1527): Late-enabling CheckJNI

04-06 21:42:00.463: D/libEGL(1527): loaded /system/lib/egl/libEGL_genymotion.so

04-06 21:42:00.463: D/(1527): HostConnection::get() New Host Connection established 0xb9326600, tid 1527

04-06 21:42:00.471: D/libEGL(1527): loaded /system/lib/egl/libGLESv1_CM_genymotion.so

04-06 21:42:00.475: D/libEGL(1527): loaded /system/lib/egl/libGLESv2_genymotion.so

04-06 21:42:00.511: W/EGL_genymotion(1527): eglSurfaceAttrib not implemented

04-06 21:42:00.515: E/OpenGLRenderer(1527): Getting MAX_TEXTURE_SIZE from GradienCache

04-06 21:42:00.519: E/OpenGLRenderer(1527): Getting MAX_TEXTURE_SIZE from Caches::initConstraints()

04-06 21:42:00.523: D/OpenGLRenderer(1527): Enabling debug mode 0

04-06 21:42:45.967: W/IInputConnectionWrapper(1527): showStatusIcon on inactive InputConnection

04-06 21:42:47.811: W/System.err(1527): java.io.FileNotFoundException: /iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAABHNCSVQICAgIfAhkiAAABLJJREFU

04-06 21:42:47.811: W/System.err(1527): eJzt2ktoXFUAxvHvnHlkMtM0k3ZaKYIYNJWqFOpChPiq64ogCq7ElYu6EcGNC1FQBFEXgi4Fd0I3

04-06 21:42:47.811: W/System.err(1527): ulGyUUHqxmIVW21rH1ZtiW1pMkknr5m5x8U8mrbUySLyUfL/QZhH7r2TwJ9zzz1zQ7VaTQJMovsP

04-06 21:42:47.815: W/System.err(1527): wMZGgLAiQFgRIKwIEFYECCsChBUBwooAYUWAsCJAWBEgrAgQVgQIKwKEFQHCigBhRYCwIkBYESCs

04-06 21:42:47.815: W/System.err(1527): CBBWBAgrAoQVAcKKAGFFgLAiQFgRIKwIEFYECCsChBUBwooAYUWAsCJAWBEgrAgQVgQIKwKEFQHC

04-06 21:42:47.815: W/System.err(1527): igBhRYCwIkBYESCsCBBWBAgrAoQVAcKKAGFFgLAiQFgRIKwIEFYECCsChNW6B9gOUgpSSJ1HqfNc

04-06 21:42:47.815: W/System.err(1527): uvoa6Fn3AIvZ1fh6j1n3U2K23p+GW11+vQ/YDlKMUXuXx1QLJTXbK/o+zGi62GIExA1CtVpN63nA

04-06 21:42:47.815: W/System.err(1527): R4d36I3hPZoZSvph+Iq2xaIenKvoy/O/6t3cSbWJEKusIcBMIUW1orQjK2iyNSbFoOMrdf1WWuqf

04-06 21:42:47.815: W/System.err(1527): XvOZNDl6h94a3q3XFg/rYP2cJCmlpFqtpg9GHtKZM6f0eu5Yf04IDAwwJKkVpZdKu/TCyC79WKxr

04-06 21:42:47.815: W/System.err(1527): bijq4caIvp4+oTfTEbWDlM/nNVXbp/dmD+mrpb/787926MRZq47pi/Lj2n96SofLC0QISWuYA7ai

04-06 21:42:47.815: W/System.err(1527): 9GRlXM+W7tbzs9/oeHNGMZO2j1T1/vgj2n+yoQ/zZ3R/ZbtyyyuaWv5L7RCUT534ct0Q/6lf1sGt

04-06 21:42:47.815: W/System.err(1527): c7pvdId+WjmlfNY5Nja2gQnELOm50Ql9Uv9Fvy/P9N+fbszqoytH9NSWnYqZdFdWUf3KvFIWlEs3

04-06 21:42:47.815: W/System.err(1527): Hjwq6PzyvDYVS/1RFRgcYIyaSJt0dOGistDZPIudU/PRxUuqVCoqK2g6v6RisdifE2axs+yyeg1w

04-06 21:42:47.815: W/System.err(1527): LA6plTX7+7MOjoEFpJQ0m2trWyoqKFNI6v9syhWV2pkWg/Tz8mWNbt6s3Ytl5bq/z2InvBSkUr6o

04-06 21:42:47.815: W/System.err(1527): J5pbdaJxWYUUuksyLAxudGsagqZ0Qc+MTCifZdd8w/GKdurQwrRSSqovNvRZ4bxe3bJH5e7IF7PO

04-06 21:42:47.815: W/System.err(1527): PDCEoLdLD+iPlXl9Fy6p2R0WuRDBmtYBK8Nlfbx9rwoX6vp88axi1tbkljs1UajqxYvf6k8tSJIK

04-06 21:42:47.815: W/System.err(1527): hYLeuW1S99bzOtA4rZmlhsrlsvZtHtdwoaiXLxzU2TQvqXNx0opEuNGtaRkmi1KlMKSnq/doZ6Wm

04-06 21:42:47.819: W/System.err(1527): XJLOzVzSp0sn1Fheumb7XJQma+N6rHS7tsaS5rKWjs1O68DiKTWbzf/1n8GtZ2CAqbuO17tqDe0k

04-06 21:42:47.819: W/System.err(1527): xXDTGwxS6Jx6exchadXNCbnu0gzQM3AdsD+P615YpG58N/teN6TOxLK3X+89ifhwo8FXwatGsN7r

04-06 21:42:47.819: W/System.err(1527): QXO3lXh129WxcjMCrremu2Guv7cvp/+OqXeqXX1bVm9fYDVWgmFFgLAiQFgRIKwIEFYECCsChBUB

04-06 21:42:47.819: W/System.err(1527): wooAYUWAsCJAWBEgrAgQVgQIKwKEFQHCigBhRYCwIkBYESCsCBBWBAgrAoQVAcKKAGFFgLAiQFgR

04-06 21:42:47.819: W/System.err(1527): IKwIEFYECCsChBUBwooAYUWAsCJAWBEgrAgQVgQIKwKEFQHCigBhRYCwIkBYESCsCBBWBAgrAoTV

04-06 21:42:47.819: W/System.err(1527): vzTaVIDsaxXyAAAAAElFTkSuQmCC

04-06 21:42:47.819: W/System.err(1527): : open failed: ENOENT (No such file or directory)

04-06 21:42:47.819: W/System.err(1527): 	at libcore.io.IoBridge.open(IoBridge.java:409)

04-06 21:42:47.819: W/System.err(1527): 	at java.io.FileInputStream.(FileInputStream.java:78)

04-06 21:42:47.819: W/System.err(1527): 	at java.io.FileInputStream.(FileInputStream.java:105)

04-06 21:42:47.819: W/System.err(1527): 	at com.example.envio.MainActivity.imageToByte(MainActivity.java:136)

04-06 21:42:47.819: W/System.err(1527): 	at com.example.envio.MainActivity.onActivityResult(MainActivity.java:102)

04-06 21:42:47.819: W/System.err(1527): 	at android.app.Activity.dispatchActivityResult(Activity.java:5322)

04-06 21:42:47.819: W/System.err(1527): 	at android.app.ActivityThread.deliverResults(ActivityThread.java:3363)

04-06 21:42:47.819: W/System.err(1527): 	at android.app.ActivityThread.handleSendResult(ActivityThread.java:3410)

04-06 21:42:47.819: W/System.err(1527): 	at android.app.ActivityThread.access$1100(ActivityThread.java:141)

04-06 21:42:47.819: W/System.err(1527): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304)

04-06 21:42:47.819: W/System.err(1527): 	at android.os.Handler.dispatchMessage(Handler.java:99)

04-06 21:42:47.819: W/System.err(1527): 	at android.os.Looper.loop(Looper.java:137)

04-06 21:42:47.823: W/System.err(1527): 	at android.app.ActivityThread.main(ActivityThread.java:5103)

04-06 21:42:47.823: W/System.err(1527): 	at java.lang.reflect.Method.invokeNative(Native Method)

04-06 21:42:47.823: W/System.err(1527): 	at java.lang.reflect.Method.invoke(Method.java:525)

04-06 21:42:47.823: W/System.err(1527): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)

04-06 21:42:47.823: W/System.err(1527): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)

04-06 21:42:47.823: W/System.err(1527): 	at dalvik.system.NativeStart.main(Native Method)

04-06 21:42:47.823: W/System.err(1527): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)

04-06 21:42:47.823: W/System.err(1527): 	at libcore.io.Posix.open(Native Method)

04-06 21:42:47.827: W/System.err(1527): 	at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)

04-06 21:42:47.827: W/System.err(1527): 	at libcore.io.IoBridge.open(IoBridge.java:393)

04-06 21:42:47.827: W/System.err(1527): 	 17 more

04-06 21:42:47.847: W/EGL_genymotion(1527): eglSurfaceAttrib not implemented

04-06 21:42:50.439: W/EGL_genymotion(1527): eglSurfaceAttrib not implemented

04-06 21:42:50.443: D/dalvikvm(1527): GC_FOR_ALLOC freed 193K, 3% free 9116K/9336K, paused 4ms, total 4ms

04-06 21:42:51.455: E/TAG(1527): failed to connect to /192.168.0.101 (port 8080) after 50000ms: isConnected failed: ECONNREFUSED (Connection refused)

04-06 21:42:51.455: E/TAG(1527): java.net.ConnectException: failed to connect to /192.168.0.101 (port 8080) after 50000ms: isConnected failed: ECONNREFUSED (Connection refused)

04-06 21:42:51.455: E/TAG(1527): 	at libcore.io.IoBridge.isConnected(IoBridge.java:223)

04-06 21:42:51.455: E/TAG(1527): 	at libcore.io.IoBridge.connectErrno(IoBridge.java:161)

04-06 21:42:51.455: E/TAG(1527): 	at libcore.io.IoBridge.connect(IoBridge.java:112)

04-06 21:42:51.455: E/TAG(1527): 	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)

04-06 21:42:51.455: E/TAG(1527): 	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)

04-06 21:42:51.455: E/TAG(1527): 	at java.net.Socket.connect(Socket.java:842)

04-06 21:42:51.455: E/TAG(1527): 	at libcore.net.http.HttpConnection.(HttpConnection.java:76)

04-06 21:42:51.455: E/TAG(1527): 	at libcore.net.http.HttpConnection.(HttpConnection.java:50)

04-06 21:42:51.455: E/TAG(1527): 	at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)

04-06 21:42:51.455: E/TAG(1527): 	at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)

04-06 21:42:51.455: E/TAG(1527): 	at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)

04-06 21:42:51.455: E/TAG(1527): 	at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)

04-06 21:42:51.455: E/TAG(1527): 	at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)

04-06 21:42:51.455: E/TAG(1527): 	at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)

04-06 21:42:51.455: E/TAG(1527): 	at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)

04-06 21:42:51.455: E/TAG(1527): 	at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)

04-06 21:42:51.455: E/TAG(1527): 	at com.example.envio.JsonSet$SetCobranca.doInBackground(JsonSet.java:106)

04-06 21:42:51.455: E/TAG(1527): 	at com.example.envio.JsonSet$SetCobranca.doInBackground(JsonSet.java:1)

04-06 21:42:51.455: E/TAG(1527): 	at android.os.AsyncTask$2.call(AsyncTask.java:287)

04-06 21:42:51.455: E/TAG(1527): 	at java.util.concurrent.FutureTask.run(FutureTask.java:234)

04-06 21:42:51.455: E/TAG(1527): 	at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)

04-06 21:42:51.455: E/TAG(1527): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)

04-06 21:42:51.455: E/TAG(1527): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)

04-06 21:42:51.455: E/TAG(1527): 	at java.lang.Thread.run(Thread.java:841)

04-06 21:42:51.455: E/TAG(1527): Caused by: libcore.io.ErrnoException: isConnected failed: ECONNREFUSED (Connection refused)

04-06 21:42:51.455: E/TAG(1527): 	at libcore.io.IoBridge.isConnected(IoBridge.java:208)

04-06 21:42:51.455: E/TAG(1527): 	 23 more
me1

Fala mano, blz?

Parece que o Genymotion (emulador) não está conseguindo se conectar ao seu computador:

(Parte do seu log de erros):

Faz o seguinte, na url do web services, troca o ip 192.168.0.101 por 10.0.3.2.
Testa aí e avisa agente se funciona ou não.

links:


http://developer.android.com/intl/pt-br/tools/devices/emulator.html#networkaddresses

Criado 5 de abril de 2016
Ultima resposta 7 de abr. de 2016
Respostas 3
Participantes 2