마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

signalr hub 를 이용해서 채팅앱 만들려고 하는데 쓰레드 때문인지 뭔지는 모르겠는데 안되요

0 추천

public class MainActivity extends Activity {

 

public TextView tv;

public EditText nickText;

public EditText msgText;

public ScrollView sv;

public String nickName;

public String text;

 

public Button cB;

public Button eB;

public Button sB;

public Button rB;

 

public PrintWriter streamOut = null;

public BufferedReader streamIn = null;

 

 

public void msgview(String msg){

tv.append(msg+"\n");

}

 

HubConnection conn;

HubProxy proxy;

Logger logger;

 

 

 

 

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

 

nickText = (EditText)findViewById(R.id.connText);

sv = (ScrollView)findViewById(R.id.scrollView1);

tv = (TextView)findViewById(R.id.text01); //sv안에 있음

msgText = (EditText)findViewById(R.id.chatText);

 

cB=(Button)findViewById(R.id.connBtn);

eB=(Button)findViewById(R.id.closeBtn);

sB=(Button)findViewById(R.id.sendBtn);

rB=(Button)findViewById(R.id.refrsh);

 

Logger logger = new Logger() {

 

@Override

public void log(String message, LogLevel level) {

//tv.append(message+"\n");

//sv.fullScroll(ScrollView.FOCUS_DOWN);

}

 

};

 

 

 

 

 

 

conn = new HubConnection("http://10.1.111.156:8080", "", true, logger);

proxy = conn.createHubProxy("MyHub");

 

 

proxy.subscribe(new Object() {

@SuppressWarnings("unused")

public void addMessage(String name, String message) {

msgview(name + ": " + message+"\n");

 

tv.postInvalidate();

 

 

}

});

 

Button cB=(Button)findViewById(R.id.connBtn);

eB.setOnClickListener(new Button.OnClickListener(){

public void onClick(View v){

conn.start();

//sv.fullScroll(ScrollView.FOCUS_DOWN);

 

}

});

 

Button eB=(Button)findViewById(R.id.closeBtn);

eB.setOnClickListener(new Button.OnClickListener(){

public void onClick(View v){

conn.stop();

 

}

});

 

 

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

sendBtn.setOnClickListener(new Button.OnClickListener(){

public void onClick(View v){

 

proxy.invoke("addMessage",nickText.getText().toString(),msgText.getText().toString());

 

}

});

 

Button rB=(Button)findViewById(R.id.refrsh);

rB.setOnClickListener(new Button.OnClickListener(){

public void onClick(View v){

tv.refreshDrawableState();

tv.invalidate();

sv.fullScroll(sv.FOCUS_DOWN);

}

});

 

conn.error(new ErrorCallback() {

 

@Override

public void onError(Throwable error) {

error.printStackTrace();

}

});

 

 

conn.received(new MessageReceivedHandler() {

 

@Override

public void onMessageReceived(JsonElement json) {

 

}

});

 

 

 

}

 

public void connBtnClick(View v) {

 

switch(v.getId()){

case R.id.connBtn :

conn.start();

 

break;

 

case R.id.closeBtn :

conn.stop();

break;

 

case R.id.sendBtn :

proxy.invoke("addMessage");

break;

}

}

 
signalr hub connection 을 쓰고 있는데 연결도 잘 되고 서버로 메세지도 잘 전달이 되는데 이상하게 첫번째 메세지가 텍스트뷰에 뜨지 않고 두번째 메세지부터 떠요.
쓰레드 때문인것 같기도 한데 초보라서 뭐 어떻게 해야할지 모르겠네요..
그리고  send 버튼을 누르면 텍스트입력창에 있는 메세지를 지우는것과,
send버튼을 누르면 스크롤뷰를 아래로 정렬(?) (FOCUS_DOWN?) 하고 싶은데 어떻게 하나요??
signalr hub 님이 2014년 11월 26일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...