Ver mensagens sem resposta | Ver tópicos ativos Hoje é 12 Nov 2019, 10:45



Responder Tópico  [ 33 Mensagens ] 
 [TUTORIAL] Trabalhando com Socket no Android II - Arquivo 
Autor Mensagem
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem [TUTORIAL] Trabalhando com Socket no Android II - Arquivo
Irei dar continuidade ao tutorial, Trabalhando com Socket no Android, publicado aqui no Portal Android.
Na primeira parte foi simplesmente enviado uma mensagem (String) para o servidor, através do dispositivo Android.
Agora vamos alterar um pouco o projeto, para que seja possível enviarmos fotos, através de um Socket. E para isso vamos utilizar a camera do próprio dispositivo Android, cujo assunto foi abordado no Tutorial Utilizar Camera do Android - Intent, também disponível aqui no portal.

Iniciamos alterando o arquivo AndroidManifest.xml, permitindo gravar dados em uma unidade externa (SD Card).
AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 


O arquivo form_msg.xml, será alterado para que possamos, iniciar a camera do dispositivo e visuzalizar a foto e enviá-la para o Servidor Socket.
form_msg.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical">

    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:orientation="vertical"
        android:layout_weight="10" android:id="@+id/layoutMensagem">

        <TextView android:layout_width="fill_parent" android:text=""
            android:layout_height="wrap_content" android:id="@+id/lbIp"
            android:layout_weight="1">
</TextView>
        <ImageView android:src="@drawable/icon"
            android:layout_width="fill_parent" android:layout_height="fill_parent"
            android:layout_weight="5" android:id="@+id/imgImagem">
</ImageView>
        <TextView android:text="" android:layout_height="wrap_content"
            android:layout_width="fill_parent" android:id="@+id/lbMensagemServ">
</TextView>
        <Button android:text=">>Enviar Imagem" android:id="@+id/btnEnviar"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:layout_weight="1" android:visibility="invisible"></Button>
        <Button android:text=">
>Camera" android:id="@+id/btnCamera"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:layout_weight="1"></Button>
    </LinearLayout>
    <LinearLayout android:layout_width="fill_parent"
        android:orientation="vertical" android:id="@+id/linearLayout2"
        android:layout_height="wrap_content">

        <TextView android:layout_width="fill_parent" android:text="Servidor-> Conectado"
            android:id="@+id/lbStatus" android:layout_height="wrap_content"></TextView>
    </LinearLayout>
    <LinearLayout android:layout_width="fill_parent"
        android:id="
@+id/linearLayout2" android:layout_height="wrap_content"
        android:orientation="
horizontal">
        <Button android:layout_width="wrap_content" android:text=">
>Desconectar"
            android:id="@+id/btnDesconectar" android:layout_height="wrap_content"
            android:layout_weight="1"></Button>
    </LinearLayout>
</LinearLayout>
 

Note que retiramos o EditText, onde escreviámos a mensagem, e colocamos um ImegeView, onde será apresentadoa foto.
Adicionamos um botão para iniciar a câmera, btnCamera, e outro para enviar a foto, btnEnviar, que está oculto e só será exibido ao possuir alguma foto no ImageView.

Sender.java


    @Override
    public void run() {
        while (running) {// Enquanto estiver executando

            try {
                if (image != null) { // Se existir uma Imagem para enviar
                    // Converte Bitmap para bytes
                    ByteArrayOutputStream bos = new ByteArrayOutputStream();
                    image.compress(CompressFormat.PNG, 0, bos);
                    byte[] byteImage = bos.toByteArray();

                    // Escreve Stream da imagem
                    out.write(byteImage);
                    out.flush();

                    image = null;

                }

            } catch (IOException e) {
                e.printStackTrace();
                msg = new Message();
                msg.arg1 = ConnectionSocket.ERROR;
                msg.obj = e.getMessage();
                handler.sendMessage(msg);
                running = false;
            }

        }
        try {
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 

Sender.java é a classe responsável pelo envio da imagem. Antes, ela somente enviava uma String. Então o atributo message foi substituido por um atributo do tipo Bitmap.
No método run(), passamos a converter o bitmap em Stream, para enviar ao servidor de socket.

Agora vamos ver como ficou o código da classe MensagemAndroid.java.
MensagemAndroid.java.

public class MensagemAndroid extends Activity implements OnClickListener {
    private static final int TAKE_PICTURE = 4;
    private TextView lbStatus;
    private Button btnDesconectar;
    private Button btnCamera;
    private Button btnEnviar;
    private Bitmap bitmap;
    private ImageView imgImagem;
     (...)
       @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.form_msg);

        lbStatus = (TextView) findViewById(R.id.lbStatus);

        btnEnviar = (Button) findViewById(R.id.btnEnviar);
        btnEnviar.setOnClickListener(this);

        imgImagem = (ImageView) findViewById(R.id.imgImagem);

        btnCamera = (Button) findViewById(R.id.btnCamera);
        btnCamera.setOnClickListener(this);

 


Nessa classe declaramos uma constante TAKE_PICTURE, que será usada posteriormente. Ainda nesta classe recuperamos os objetos de tela, para adicionarmos o listener de click.

MensagemAndroid.java

       public void onClick(View v) {
        // clicou no botão desconectar
        if (v == btnDesconectar) {
            try {
                ConnectionSocket.getCurentConnection().disconnect();
            } catch (Exception e) {
                e.printStackTrace();
            }
            // Clicou no botão enviar mensagem
        } else if (v == btnEnviar) {
            ConnectionSocket.getCurentConnection().sendImage(bitmap);
        } else if (v == btnCamera) {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, TAKE_PICTURE);
        }
    }
 


Ao clicar no botão btnCamera, iniciamos a Intent da camera do dispositivo (esse assunto foi abrodado no tutorial Utilizar Camera do Android - Intent).
Já o botão >>Enviar, agenda a imagem para envio ao servidor ConnectionSocket.getCurentConnection().sendImage(bitmap);.

Quando utilizamos startActivityResult, podemos manipular o retorno no método protected void onActivityResult(int requestCode, int resultCode, Intent data).

MensagemAndroid.java


    @Override
    protected void onActivityResult(int requestCode, int resultCode,
            final Intent data) {
        if (requestCode == TAKE_PICTURE) {
            if (resultCode == RESULT_OK) {
                bitmap = (Bitmap) data.getExtras().get("data");

                imgImagem.setImageBitmap(bitmap);

                btnEnviar.setVisibility(Button.VISIBLE);

            } else if (resultCode == RESULT_CANCELED) {
                Toast.makeText(this, "Cancelou", Toast.LENGTH_SHORT);
            } else {
                Toast.makeText(this, "Saiu", Toast.LENGTH_SHORT);
            }

        }
    }
 

Primeiro testamos se o resultado é o que requisitamos a Intent, na linha 1, para isso utilizamos a constante TAKE_PICTURE, depois exibimos a imagem dentro do ImageView e exibe o botão >>Enviar.

Primeiro vamos executar o projeto do Servidor.
Imagem

Agora vamos executar o Projeto do Android.
Imagem

Após clicarmos em Conectar, aparecerá a tela MensagemAndroid.java.
Imagem

Ao clicar no botão Camera a o aplicativo da camero do dipositivo será iniciada, aparece uma tela com vários quadrados como na imagem abaixo. Isso acontece porque estamos rodando o programa em um emulador.
Imagem

Após, tirarmos a foto voltaremos novamente na tela de envio das fotos, com nossa foto no ImageView e com o botão >>Enviar visível, então clicando no botão enviar, ela será recebido no servidor.
Imagem

O código fonte dos projetos estão disponíveis para download aqui.
Esse tutorial demonstra um pouco do poder de comunicação via Socket, onde na primeira parte enviamos um simples mensagem e com poucas linhas de alteração passamos a enviar um arquivo.

_________________
http://www.turim.wordpress.com/

@turim_thiago


20 Set 2011, 19:31
Perfil WWW
What is Android?
What is Android?

Data de registro: 15 Abr 2011, 10:31
Mensagens: 6
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
o pessoal da comunidade é fera mesmo!

turim, que belo artigo!


21 Set 2011, 20:08
Perfil
What is Android?
What is Android?

Data de registro: 14 Set 2011, 14:25
Mensagens: 5
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
Tutorial simplesmente perfeito!
Ta ajudando e MTO no meu aplicativo!


26 Set 2011, 11:28
Perfil
What is Android?
What is Android?

Data de registro: 14 Set 2011, 14:25
Mensagens: 5
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
A parte do android esta funcionando certinho, porém quando eu envio uma imagem, na parte do servidor, ela é criada, nomeada certinho, porem essa imagem não pode ser aberta enquanto o servidor nao eh fechado, pelos meus testes, o código não sai desse laço:
while ((read = in.read()) != -1) {
                       
fout.write(read);
               
}


01 Out 2011, 15:24
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
Testei o código aqui e está ok.

Veja se no lado do ClienteAndroid, está chamando o método flush() após 'escrever' os bytes da figura no stream.

_________________
http://www.turim.wordpress.com/

@turim_thiago


03 Out 2011, 10:26
Perfil WWW
What is Android?
What is Android?

Data de registro: 14 Set 2011, 14:25
Mensagens: 5
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
turim escreveu:
Testei o código aqui e está ok.

Veja se no lado do ClienteAndroid, está chamando o método flush() após 'escrever' os bytes da figura no stream.

Esta sim, na classe Sender
Seria possivel vc upar o apk pra eu testar no meu celular? Vlws


06 Out 2011, 01:18
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
Você quer dizer enviar a APK para para o aparelho ?

_________________
http://www.turim.wordpress.com/

@turim_thiago


14 Out 2011, 18:29
Perfil WWW
What is Android?
What is Android?

Data de registro: 14 Set 2011, 14:25
Mensagens: 5
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
Ow turim vlw! Eu arrumei aqui e deu certo,
Apenas inclui esse try logo após enviar o arquivo:
try {
              ConnectionSocket.getCurentConnection().disconnect();
            } catch (Exception e) {
                e.printStackTrace();
            }


Agora roda de boas!

vlws!


15 Out 2011, 01:00
Perfil
Anatomy of an App
Anatomy of an App

Data de registro: 25 Nov 2011, 16:17
Mensagens: 160
Localização: Florianópolis
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
Consigo mandar uma entidade por Socket? como faria?

_________________
--
Att,
Leandro


25 Nov 2011, 17:37
Perfil
Anatomy of an App
Anatomy of an App

Data de registro: 25 Nov 2011, 16:17
Mensagens: 160
Localização: Florianópolis
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
Olá,
Gostaria de enviar uma entidade por Socket seria desta forma?
            OutputStream os = socket.getOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(os);

            oos.writeObject(registro);


Muito Obrigado! /uu

_________________
--
Att,
Leandro


25 Nov 2011, 17:42
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
O Objecto deve implementar java.io.Serialinable, e é exatamente da forma com que você colocou.

Mas no lado do Android, deve-se exsitir essa classem caso contrário ele não vai conseguir "recriá-la".

_________________
http://www.turim.wordpress.com/

@turim_thiago


26 Nov 2011, 14:29
Perfil WWW
What is Android?
What is Android?

Data de registro: 16 Dez 2011, 16:05
Mensagens: 7
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
e ai galera.
funcionou bacana. Agora como que eu faço para pegar esse arquivo que foi para o servidor e jogar em qualquer pasta no dispositivo.


02 Fev 2012, 16:46
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
ellismar, é possível fazer o caminho inverso, como você falou. Teria que fazer algumas alterações. Mas da mesma foram que o Servidor envia uma String como aviso de que recebeu a imagem, ele poderia enviar um arquivo, na verdade, um array de bytes.

E no servidor converteria esse byte[] em imagem novamente.

_________________
http://www.turim.wordpress.com/

@turim_thiago


02 Fev 2012, 18:53
Perfil WWW
What is Android?
What is Android?

Data de registro: 16 Dez 2011, 16:05
Mensagens: 7
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
valeu meu brother.
Bom eu sou novo nessa área, tem como você fazer um exemplo simples pra eu dar uma olhada.

Desde já agradeço.


02 Fev 2012, 23:11
Perfil
Anatomy of an App
Anatomy of an App

Data de registro: 25 Nov 2011, 16:17
Mensagens: 160
Localização: Florianópolis
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
Consigo colocar pra rodar fazendo um server no pc por USB para o celular? como faria para ele se comunicar com o computador ?

_________________
--
Att,
Leandro


07 Mar 2012, 17:17
Perfil
What is a Activity?
What is a Activity?

Data de registro: 22 Mar 2012, 18:37
Mensagens: 11
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
olá, Turin
A aplicação não está executando no emulador. "infelizmente a aplicação parou de funcionar"

o log é o seguinte

03-22 15:04:47.095: D/AndroidRuntime(1171): Shutting down VM
03-22 15:04:47.165: W/dalvikvm(1171): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
03-22 15:04:47.255: E/AndroidRuntime(1171): FATAL EXCEPTION: main
03-22 15:04:47.255: E/AndroidRuntime(1171): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{br.com.android/view.clienteAndroid}: java.lang.ClassNotFoundException: view.clienteAndroid
03-22 15:04:47.255: E/AndroidRuntime(1171): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880)
03-22 15:04:47.255: E/AndroidRuntime(1171): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
03-22 15:04:47.255: E/AndroidRuntime(1171): at android.app.ActivityThread.access$600(ActivityThread.java:123)
03-22 15:04:47.255: E/AndroidRuntime(1171): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
03-22 15:04:47.255: E/AndroidRuntime(1171): at android.os.Handler.dispatchMessage(Handler.java:99)
03-22 15:04:47.255: E/AndroidRuntime(1171): at android.os.Looper.loop(Looper.java:137)
03-22 15:04:47.255: E/AndroidRuntime(1171): at android.app.ActivityThread.main(ActivityThread.java:4424)
03-22 15:04:47.255: E/AndroidRuntime(1171): at java.lang.reflect.Method.invokeNative(Native Method)
03-22 15:04:47.255: E/AndroidRuntime(1171): at java.lang.reflect.Method.invoke(Method.java:511)
03-22 15:04:47.255: E/AndroidRuntime(1171): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-22 15:04:47.255: E/AndroidRuntime(1171): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-22 15:04:47.255: E/AndroidRuntime(1171): at dalvik.system.NativeStart.main(Native Method)
03-22 15:04:47.255: E/AndroidRuntime(1171): Caused by: java.lang.ClassNotFoundException: view.clienteAndroid
03-22 15:04:47.255: E/AndroidRuntime(1171): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
03-22 15:04:47.255: E/AndroidRuntime(1171): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
03-22 15:04:47.255: E/AndroidRuntime(1171): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
03-22 15:04:47.255: E/AndroidRuntime(1171): at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
03-22 15:04:47.255: E/AndroidRuntime(1171): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871)
03-22 15:04:47.255: E/AndroidRuntime(1171): ... 11 more
03-22 15:04:53.906: I/Process(1171): Sending signal. PID: 1171 SIG: 9
03-22 15:32:42.066: D/AndroidRuntime(1220): Shutting down VM
03-22 15:32:42.116: W/dalvikvm(1220): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
03-22 15:32:42.145: E/AndroidRuntime(1220): FATAL EXCEPTION: main
03-22 15:32:42.145: E/AndroidRuntime(1220): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{br.com.android/view.ClienteservidorActivity}: java.lang.ClassNotFoundException: view.ClienteservidorActivity
03-22 15:32:42.145: E/AndroidRuntime(1220): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880)
03-22 15:32:42.145: E/AndroidRuntime(1220): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
03-22 15:32:42.145: E/AndroidRuntime(1220): at android.app.ActivityThread.access$600(ActivityThread.java:123)
03-22 15:32:42.145: E/AndroidRuntime(1220): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
03-22 15:32:42.145: E/AndroidRuntime(1220): at android.os.Handler.dispatchMessage(Handler.java:99)
03-22 15:32:42.145: E/AndroidRuntime(1220): at android.os.Looper.loop(Looper.java:137)
03-22 15:32:42.145: E/AndroidRuntime(1220): at android.app.ActivityThread.main(ActivityThread.java:4424)
03-22 15:32:42.145: E/AndroidRuntime(1220): at java.lang.reflect.Method.invokeNative(Native Method)
03-22 15:32:42.145: E/AndroidRuntime(1220): at java.lang.reflect.Method.invoke(Method.java:511)
03-22 15:32:42.145: E/AndroidRuntime(1220): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-22 15:32:42.145: E/AndroidRuntime(1220): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-22 15:32:42.145: E/AndroidRuntime(1220): at dalvik.system.NativeStart.main(Native Method)
03-22 15:32:42.145: E/AndroidRuntime(1220): Caused by: java.lang.ClassNotFoundException: view.ClienteservidorActivity
03-22 15:32:42.145: E/AndroidRuntime(1220): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
03-22 15:32:42.145: E/AndroidRuntime(1220): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
03-22 15:32:42.145: E/AndroidRuntime(1220): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
03-22 15:32:42.145: E/AndroidRuntime(1220): at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
03-22 15:32:42.145: E/AndroidRuntime(1220): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871)
03-22 15:32:42.145: E/AndroidRuntime(1220): ... 11 more
03-22 15:32:49.155: I/Process(1220): Sending signal. PID: 1220 SIG: 9
03-22 16:21:44.506: D/AndroidRuntime(1237): Shutting down VM
03-22 16:21:44.529: W/dalvikvm(1237): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
03-22 16:21:44.706: E/AndroidRuntime(1237): FATAL EXCEPTION: main
03-22 16:21:44.706: E/AndroidRuntime(1237): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{br.com.android/view.ClienteservidorActivity}: java.lang.ClassNotFoundException: view.ClienteservidorActivity
03-22 16:21:44.706: E/AndroidRuntime(1237): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880)
03-22 16:21:44.706: E/AndroidRuntime(1237): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
03-22 16:21:44.706: E/AndroidRuntime(1237): at android.app.ActivityThread.access$600(ActivityThread.java:123)
03-22 16:21:44.706: E/AndroidRuntime(1237): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
03-22 16:21:44.706: E/AndroidRuntime(1237): at android.os.Handler.dispatchMessage(Handler.java:99)
03-22 16:21:44.706: E/AndroidRuntime(1237): at android.os.Looper.loop(Looper.java:137)
03-22 16:21:44.706: E/AndroidRuntime(1237): at android.app.ActivityThread.main(ActivityThread.java:4424)
03-22 16:21:44.706: E/AndroidRuntime(1237): at java.lang.reflect.Method.invokeNative(Native Method)
03-22 16:21:44.706: E/AndroidRuntime(1237): at java.lang.reflect.Method.invoke(Method.java:511)
03-22 16:21:44.706: E/AndroidRuntime(1237): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-22 16:21:44.706: E/AndroidRuntime(1237): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-22 16:21:44.706: E/AndroidRuntime(1237): at dalvik.system.NativeStart.main(Native Method)
03-22 16:21:44.706: E/AndroidRuntime(1237): Caused by: java.lang.ClassNotFoundException: view.ClienteservidorActivity
03-22 16:21:44.706: E/AndroidRuntime(1237): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
03-22 16:21:44.706: E/AndroidRuntime(1237): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
03-22 16:21:44.706: E/AndroidRuntime(1237): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
03-22 16:21:44.706: E/AndroidRuntime(1237): at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
03-22 16:21:44.706: E/AndroidRuntime(1237): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871)
03-22 16:21:44.706: E/AndroidRuntime(1237): ... 11 more
03-22 16:26:46.427: I/Process(1237): Sending signal. PID: 1237 SIG: 9


22 Mar 2012, 18:42
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
A excessão java.lang.ClassNotFoundException, quer dizer que a classe não existe no projeto.

Nesse caso a classe ClienteservidorActivity.

Mas essa classe realmente não existe no projeto.

Provavelmente aconteceu problemas ao importar o projeto no eclipse, ou você pode ter renomeado a classe.

_________________
http://www.turim.wordpress.com/

@turim_thiago


22 Mar 2012, 19:53
Perfil WWW
What is Android?
What is Android?

Data de registro: 17 Abr 2012, 12:52
Mensagens: 1
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
Olá..

Fiz todos os procedimentos, mais estou testando em um celular físico, rodei o ServidorJava na minha máquina, conectei perfeitamente, mais na hora do envio da imagem está apresentando este erro:


Citação:
----------- SERVIDOR CONECTADO 192.168.10.5 PORTA 1234 -----------
Esperando Conexões.
Sevidor-> Conectou Ip 192.168.10.107
<Conectou Cliente>
Imagem gravada->10_47_37-17_04_2012.png
<Conectou Cliente>
Servidor-> Erro: Software caused connection abort: socket write error
Imagem gravada->10_47_37-17_04_2012.png
java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.DataOutputStream.write(Unknown Source)
at java.io.FilterOutputStream.write(Unknown Source)
at com.sevidor.Servidor.main(Servidor.java:80)


Porém, mesmo dando o erro, apareceu os arquivos na pasta do "ServidorJava".
Abri os arquivos que foi enviados e todos aparece que não é possível "Visualização não disponível".


17 Abr 2012, 13:02
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
Tente executar e ver em que linha está acontecendo o erro.

_________________
http://www.turim.wordpress.com/

@turim_thiago


17 Abr 2012, 15:51
Perfil WWW
What is Android?
What is Android?

Data de registro: 16 Abr 2012, 19:22
Mensagens: 3
Mensagem Banco De Dados em Servidor com Socket
Estou desenvolvendo uma aplicação de cadastro de clientes com banco de dados em um servidor (tem que ser via socket), como envio e busco os dados no servidor e como faço para sincronizar os bancos pois minha aplicação roda offline, mas quando se conecta na web, tem que sincronizar os bancos, e tambem fazer gravações e consultas diretamente no banco socket...


27 Mai 2012, 01:13
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
welitons20

Aí vai da sua aplicação. O Socket simplesmente resolve o problema da comunidação via rede.

A partir daí você deve desenvolver uma forma de controlar os registros do SQLite do Android, com o Servidor remoto.


Vai muito do negócio.


[]'s

_________________
http://www.turim.wordpress.com/

@turim_thiago


28 Mai 2012, 15:42
Perfil WWW
Android application
Android application

Data de registro: 22 Mar 2012, 11:35
Mensagens: 85
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
Tudo bom turim... manja d+ ein rapaiz! hehe

aqui é o seguinte, to com uma mega dúvida..

estou fazendo meu tcc com android e é o seguinte, no android, vou armazenando dados dos clientes, tudo em um banco de dados (banco de dados feito no SQLLite), queria transferir esse banco de dados carregado para um servidor para que o mesmo possa fazer a leitura desses dados. Como posso fazer isso?

estou precisando só disso pra fechar meu tcc !

a ajuda de outras pessoas também sao bem vindaas!

:D

Wyllyam


28 Set 2012, 21:50
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
Wyllyam escreveu:
Tudo bom turim... manja d+ ein rapaiz! hehe

aqui é o seguinte, to com uma mega dúvida..

estou fazendo meu tcc com android e é o seguinte, no android, vou armazenando dados dos clientes, tudo em um banco de dados (banco de dados feito no SQLLite), queria transferir esse banco de dados carregado para um servidor para que o mesmo possa fazer a leitura desses dados. Como posso fazer isso?

estou precisando só disso pra fechar meu tcc !

a ajuda de outras pessoas também sao bem vindaas!

:D

Wyllyam

Existem várias formas de se fazer isso. Só que o Socket não fornece suporte a isso ok? Será da parte do seus sistema, caberia a você desenvolver isso.

Além de Socket você pode utilizar WebServices, Http puro, aqui no portal tem tutoriais sobre esses assuntos.

Você pode transferir um aquivo como se fosse um script e executar no banco externo, pode cirar um protocolo e assim interpretar no Servidor e inserir.

Para isso vai precisar de um Servlet ou um ServerSocket.

Basta conectar ao Socket/Servlet, e enviar uma String/Arquivo, contento as alterações do Banco. A partir daí o Servidor (Socket/Servlet), deve interpretar e persistir no BD.


Espero que ajude.


[]

_________________
http://www.turim.wordpress.com/

@turim_thiago


02 Out 2012, 12:48
Perfil WWW
Android application
Android application

Data de registro: 13 Ago 2012, 12:29
Mensagens: 68
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
Tem como eu implementar um Socket para rodar em um programa Java Web?


30 Out 2012, 12:31
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
joserodrigues escreveu:
Tem como eu implementar um Socket para rodar em um programa Java Web?


Nunca tentei, Socket é uma classe JavaSE. Se não me engano o Socket está baixo do Servlet. O Servlet é uma camada acima do Socket.

Pode até ser que possa ser usado, mas nào faz muito sentido. Socket implementa um tipo de comunicação chamada full-duplex, já o Http não, você envia uma requisição e não sab quando vai voltar a resposta.

_________________
http://www.turim.wordpress.com/

@turim_thiago


31 Out 2012, 09:37
Perfil WWW
Hello World!
Hello World!

Data de registro: 15 Mar 2012, 16:36
Mensagens: 22
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
Turim boa tarde.

gostaria de saber se você pode me ajudar com uma aplicação que usa socket para conectar com um dispositivo bluetooth (leitor optico de codigo de barras).
eu consigo fazer a conexão com o dispositivo e até ler o inputstream dele em uma unica janela, porem eu queria fazer a conexão ao abrir a aplicação e ficar ouvindo o inputstream dele enquanto a aplicação estiver aberta, só que não estou sabendo como posso criar essa classe de forma que o inputstream dele fique acessivel o tempo todo, no meu caso eu sou o servidor socket e o leitor deve ficar me enviando leituras.

abaixo segue oque eu fiz em uma unica janela e que funciona.

package br.com.newbluetooth;

import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;
import java.util.Set;
import java.util.UUID;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
//import android.widget.EditText;
import android.widget.Toast;

@SuppressLint("HandlerLeak")
public class New3 extends Activity {
   
    // Socket de Conexão
    private BluetoothSocket socket;

    // Fluxo de Entrada de Dados
    private InputStream input;

    // Manipulador de Mensagens
    private final Handler h = new Handler() {
        public void handleMessage(Message msg) { // Manipular Mensagem
            String content = msg.getData().getString("LEITOR"); // Captura do Conteúdo da Mensagem
            Toast.makeText(New3.this, "NF: " + content, Toast.LENGTH_SHORT).show();
        }
    };

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new3);

        // Requisição do Adaptador
        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
        if (adapter == null) { // Não há Bluetooth
            // Mensagem de Erro ao Usuário
            Toast.makeText(New3.this, "Adaptador não Encontrado", Toast.LENGTH_SHORT).show();
            finish();
        }
        if (!adapter.isEnabled()) { // Bluetooth Habilitado?
            // Mensagem de Erro ao Usuário
            Toast.makeText(New3.this, "Bluetooth Desabilitado", Toast.LENGTH_SHORT).show();
            finish();
        }
        // Dispositivos Pareados
        Set<BluetoothDevice> devices = adapter.getBondedDevices();
        // Servidor Bluetooth
        BluetoothDevice server = null;
        String servername = "OPN2002_F13B"; // Nome do Servidor
        // Pesquisa do Servidor Pareado
        for (BluetoothDevice device : devices) { // Laço de Busca
            if (servername.equals(device.getName())) { // Nomes Idênticos?
                server = device; // Dispositivo Encontrado e Selecionado
            }
        }
        // Dispositivo Encontrado?
        if (server == null) {
            // Mensagem de Erro ao Usuário
            Toast.makeText(New3.this, "Servidor não Pareado", Toast.LENGTH_SHORT).show();
            finish();
        }
        // Servidor Bluetooth
        final BluetoothDevice computer = server;
        // Abrindo a Conexão
        Thread connector = new Thread() {
            public void run() {
                // Identificador Único do Servidor
                UUID ident = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
                try {
                    // Socket de Conexão
                    BluetoothSocket s = computer.createRfcommSocketToServiceRecord(ident);
                    // Conectar ao Servidor
                    s.connect(); // Execução Bloqueante
                    // Fluxos de Entrada e Saída de Dados
                    InputStream in = s.getInputStream();
                    // OutputStream out = s.getOutputStream();
                    // Captura de Objetos
                    socket = s; // Socket de Conexão
                    input = in; // Fluxo de Entrada de Dados
                    // output = out; // Fluxo de Saída de Dados
                    // Informar sobre Conexão

                    Scanner sss = new Scanner(input);

                    Bundle t = new Bundle();

                    Message msg = new Message();

                    int LEITOR = 1;

                    msg.what = LEITOR;

                    // while (sss.nextLine() != null) {
                    while (sss.hasNext()) {
                        // Toast.makeText(New2.this,"Leu: " +
                        // sss.nextLine(),Toast.LENGTH_SHORT).show();
                        // et_e.setText(sss.nextLine());
                        t.putString("LEITOR", sss.nextLine());
                        msg.setData(t);
                        h.sendMessage(msg);
                    }

                } catch (IOException e) { // Erro de Entrada e Saída de Dados
                    // Mensagem de Erro ao Usuário
                    finish();
                }
            }
        };
        // Executando o Fluxo de Processamento
        connector.start(); // Inicialização
    }

    public void onDestroy() {
        super.onDestroy(); // Método Sobrescrito
        if (socket != null) { // Socket Configurado?
            try {
                socket.close(); // Fecha Conexão
            } catch (IOException e) { // Erro Encontrado?
                // Mensagem de Erro ao Usuário
                Toast.makeText(New3.this, "Erro ao Fechar Socket", Toast.LENGTH_SHORT).show();
            }
        }
    }
}


tentei criar uma classe bluetooth conection que até conecta, mas não sei como deve ser a thread que fica lendo o inputstream dela por fora desta classe bluetooth conection.

package br.com.mirassol_mobile.conexao;

import java.io.IOException;
import java.util.Set;
import java.util.UUID;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;

public class BluetoothCon {

    private BluetoothSocket socket = null;

    public BluetoothSocket conecta(String serverName) {

        // Requisição do Adaptador
        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
        if (adapter == null) { // Não há Bluetooth
            socket = null;
            return socket;
        }
        if (!adapter.isEnabled()) { // Bluetooth Habilitado?
            socket = null;
            return socket;
        }
       
        // Dispositivos Pareados
        Set<BluetoothDevice> devices = adapter.getBondedDevices();
        // Servidor Bluetooth
        BluetoothDevice server = null;
       
        // Pesquisa do Servidor Pareado
        for (BluetoothDevice device : devices) { // Laço de Busca
            if (serverName.equals(device.getName())) { // Nomes Idênticos?
                server = device; // Dispositivo Encontrado e Selecionado
            }
        }
       
        // Dispositivo Encontrado?
        if (server == null) {
            socket = null;
            return socket;
        }
        // Servidor Bluetooth
        final BluetoothDevice computer = server;
        // Abrindo a Conexão
                // Identificador Único do Servidor
                UUID ident = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
                try {
                    // Socket de Conexão
                    BluetoothSocket s = computer.createRfcommSocketToServiceRecord(ident);
                    // Conectar ao Servidor
                    s.connect(); // Execução Bloqueante

                    socket = s; // Socket de Conexão      
                   
                } catch (IOException e) { // Erro de Entrada e Saída de Dados
                    // Mensagem de Erro ao Usuário
                    // finish();
                }

        return socket;

    }

}
 


não sei se fui claro na minha explicação.

desde ja agradeço a atenção.


03 Jan 2013, 18:42
Perfil
Anatomy of an App
Anatomy of an App

Data de registro: 11 Dez 2012, 11:48
Mensagens: 113
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
Olá pessoal, bom dia a todos,
achei esse tutorial muito interessante e gostaria de implementar este código
mais de uma forma diferente, com o Android sendo o servidor
e o Cliente em Java, para enviar arquivos .txt pro Android, desde já agradeço


04 Fev 2013, 10:39
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
Olá PedroCarvilhe,

A APi do Android possui a classe ServerSocket, basta implementá-la, como foi implementado no servidor JSE do tutorial.
Acredito que funcione.

[]

_________________
http://www.turim.wordpress.com/

@turim_thiago


05 Fev 2013, 10:50
Perfil WWW
What is Android?
What is Android?

Data de registro: 24 Out 2012, 00:24
Mensagens: 1
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
Alguem sabe como eu posso fazer o servidor receber conexões com vários clientes diferentes?
Estou precisando disso para finalizar o tcc...


04 Mar 2013, 16:34
Perfil
What is Android?
What is Android?

Data de registro: 22 Mar 2013, 10:54
Mensagens: 1
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
Tutorial fera!!

Estou utilizando o código para fazer esse processo de transferência de arquivo "txt" do dispositivo para servidor.
Minha duvida é se trocar as referencias as imagens por File, daria certo para manter a transferência dos arquivos?


22 Mar 2013, 11:02
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
guilhermetaylor escreveu:
Alguem sabe como eu posso fazer o servidor receber conexões com vários clientes diferentes?
Estou precisando disso para finalizar o tcc...


Deve-se utilizar Threads, uma rápida busca no google você encontra.

_________________
http://www.turim.wordpress.com/

@turim_thiago


04 Abr 2013, 19:00
Perfil WWW
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
Ettorefk escreveu:
Tutorial fera!!

Estou utilizando o código para fazer esse processo de transferência de arquivo "txt" do dispositivo para servidor.
Minha duvida é se trocar as referencias as imagens por File, daria certo para manter a transferência dos arquivos?


Seria a mesma coisa, no final tudo são Streams, bastaria converter um File.

_________________
http://www.turim.wordpress.com/

@turim_thiago


04 Abr 2013, 19:02
Perfil WWW
What is Android?
What is Android?

Data de registro: 22 Jan 2014, 23:15
Mensagens: 1
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android II - Arquiv
Turim, boa noite.

Como faço para criar um arquivo .txt pegando os dados de um campo e enviando para salvar em algum diretório no pc? Obrigado desde já.


22 Jan 2014, 23:19
Perfil
Mostrar mensagens anteriores:  Organizar por  
Responder Tópico   [ 33 Mensagens ] 

Quem está online

Usuários vendo este fórum: Alan Unger, Alexandre Castro, Alexandre de Queiroz, alfredo_ej, andi, Andre, andre.hebeler, Aniquiler, ariostorecco, Arthas, Bitor, brcamp, Cajux, camilodev, cassianotartari, cehills, cenatech, cesschneider, Chewbacca, cleber, comolatti, Corneta, Crazy_Droid, criscmaia, DaDih*, dbuarque, dmd, dreyer, drjunior, ederson_4, eduardo.ali, eduzortea, Everton Moreira, EvertonLB, fcoroa, felipetesc, flashking, gamito, gedoor, gphonemania, Gui Pereira, Ielo8, IgorBrum, jacksonst, jcorreajr, JeffCF, jijo, jmarcos14, julianofischer, JuniorE, kpinheiro, kristopher, leeeeooooooo, LForce, lhdiassilva, LucasNascimento, m4v0, marcelorferrari, MARCIOHG, martins, mateusff, Mayron Cimardi, mikasjau, navegador, NeruLL, Nidio Dolfini, nightwatch, nilsgome, Nute Gunray, oliverlessa, Orivalde, paulo.weber, paulosantos, pbcjunior, peixe, pererinha, R2-D2, Rafael, ramonsiebra, rayberg, rcotonet, rdchaves, renata, retardad0, ricardzanella, ricdigital, rlecheta, Robson Florentino, rodrigo_mg, rogeriokta, Rogério, romualdo, romulotales, Rubens Prates, shadow, silvio.carlos, skcratch, sobrinho, suissa, Synoo [Bot], tassiovirginio, Tognoli, tonical, vilmartr, voliverio, wcaciano, Wds, Wendel Carvalho, wilsond, WiseNut, YaCy, yuri82 e 2 visitantes


Você não pode criar novos tópicos neste fórum
Você não pode responder tópicos neste fórum
Você não pode editar suas mensagens neste fórum
Você não pode excluir suas mensagens neste fórum
Você não pode enviar anexos neste fórum

Procurar por:

© 2007 - 2016 Portal Android - Comunidade de Desenvolvedores Android

Estamos no Linkedin    Siga-nos no twitter


Powered by phpBB - Hospedado por Bemobi