jeudi 30 avril 2015

[Q] App crashes after sending a message using sockets topic


I'm developing a simple chat app and it just stops after transmitting the message. The Server shows the message that means that it is sent successfully but my app crashes after that. This is the Client code :


Code:


package com.example.androidpc;

import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Chat extends Activity {

    Socket socket;
    EditText msg_txt;
    TextView chatfield_tv;
    Button send_btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat);

        msg_txt = (EditText) findViewById(R.id.msg_txt);
        chatfield_tv = (TextView) findViewById(R.id.chatfield_tv);
        send_btn = (Button) findViewById(R.id.send_btn);

        socket = SocketWrapper.getSocket();

        send_btn.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                new chatIO().execute();
            }

        });
    }

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

        PrintStream ps;
        Scanner scan;
        @Override
        protected String doInBackground(String... arg0) {
            // TODO Auto-generated method stub
            try {
                ps = new PrintStream(socket.getOutputStream());
                ps.println(msg_txt.getText().toString());
                publishProgress("you");
                scan = new Scanner(socket.getInputStream());
                publishProgress("i");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onProgressUpdate(String... values) {
            // TODO Auto-generated method stub

            if(values[0].equals("you"))
            {
                chatfield_tv.append("You : "+msg_txt.getText().toString());
                msg_txt.setText("");
            }
            else
            {
                chatfield_tv.append("Server : "+scan.nextLine());
            }

            super.onProgressUpdate(values);
        }

        @Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub
            ps.flush();
            scan.close();     
            super.onPostExecute(result);
        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.chat, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}


I don't have a logcat since i don't test on an emulator or adb

xda-developers