使用套接字发送消息后应用程序崩溃

时间:2015-05-01 01:04:19

标签: android sockets client chat server

我正在开发一个简单的聊天应用程序,它只是在传输消息后停止。服务器显示消息,表示它已成功发送但我的应用程序在此之后崩溃。这是客户端代码:

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

0 个答案:

没有答案