안녕하세요, 안드로이드 공부하는 초보입니다..^^;
다름이아니라, 홈네트워크 프로젝트에서 안드로이드 부분을 맡게되어서 전전긍긍하다가
겨우 완성의 끝을 보고있는데요... 한가지 오류에 발목이 잡혀버렸네요 ㅠ.ㅠ
일단 프로젝트의 구조를 간단히 말씀드리자면..
서버컴퓨터에는 다중접속이 가능한 통신 프로그램(Java)로 되어있구요
안드로이드가 그곳에 접속을 합니다.
다른 컴퓨터의 Java API도 접속을 하구요~
여기서 어느 한쪽이라도 값을 보내면 다른 모두에게 서버가 뿌려줍니다.
그러다보니 넘어오는 값이 필요한 플랫폼이 알아서 캐치해야 하거든요~
TCI/IP 통신으로 받은 값(이 값은 정해진 양식이 있습니다. 예를들어 a:10 , b:30 이런식으로 :가 들어가있습니다.)
a는 어떤 센서인지를 의미하고 : 뒤의 숫자는 센서값을 의미합니다.
저는 String으로 a:10이라는 값을 받는데 성공하였고, 이제 이것을 if문으로 각 센서에 맞는 Textview에 넣어주려 했습니다.
String Value=memo; // Value라는 String변수에 memo를 넣어줍니다. memo는 통신으로 받은 값입니다. String[] array; array = Value.split(":"); //Java의 split을 이용해, 값을 : 로 구분해 각 배열에 넣어줍니다. int select=Integer.parseInt(array[0]); // select 변수에 배열[0]을 인티져로 넣어줍니다. 이녀석은 센서 구분입니다. int select2=Integer.parseInt(array[1]); //위와 마찬가지입니다. 이녀석이 센서값이 됩니다. if(select==1) { //바로위에서 넣은 인티져값으로 조건문을 줘서 어떤 센서인지 구분합니다. tv.setText(select2); //해당하는 센서값을 넣어줍니다. } else if(select==2) { tv2.setText(select2); } |
이부분이 바로 값을 변환하여 TextView에 넣어주는 부분인데요.. 주석 내용 그대로입니다.
하지만... 소스에서 오류가 없다고 100% 되는건 아니기에 ㅠ.ㅠ
로그캣에 빨간 글씨가 도배가 되어버리는군요 흑흑...
아래가 바로 로그캣 부분입니다만, 저같은 초보가 로그캣을 알리도 없구요 ㅠ.ㅠ
10-17 19:37:10.667: D/memalloc(18205): ion: Mapped buffer base:0x50851000 size:1536000 offset:0 fd:55 10-17 19:37:11.498: D/memalloc(18205): ion: Mapped buffer base:0x50ac8000 size:1536000 offset:0 fd:62 10-17 19:37:13.760: W/dalvikvm(18205): threadid=1: thread exiting with uncaught exception (group=0x40d081f8) 10-17 19:37:13.770: E/AndroidRuntime(18205): FATAL EXCEPTION: main 10-17 19:37:13.770: E/AndroidRuntime(18205): java.lang.NumberFormatException: Invalid int: "connect client" 10-17 19:37:13.770: E/AndroidRuntime(18205): at java.lang.Integer.invalidInt(Integer.java:138) 10-17 19:37:13.770: E/AndroidRuntime(18205): at java.lang.Integer.parse(Integer.java:375) 10-17 19:37:13.770: E/AndroidRuntime(18205): at java.lang.Integer.parseInt(Integer.java:366) 10-17 19:37:13.770: E/AndroidRuntime(18205): at java.lang.Integer.parseInt(Integer.java:332) 10-17 19:37:13.770: E/AndroidRuntime(18205): at org.androidtown.ui.tab.SubPage02Activity$ReadThread$1.run(SubPage02Activity.java:170) 10-17 19:37:13.770: E/AndroidRuntime(18205): at android.os.Handler.handleCallback(Handler.java:605) 10-17 19:37:13.770: E/AndroidRuntime(18205): at android.os.Handler.dispatchMessage(Handler.java:92) 10-17 19:37:13.770: E/AndroidRuntime(18205): at android.os.Looper.loop(Looper.java:137) 10-17 19:37:13.770: E/AndroidRuntime(18205): at android.app.ActivityThread.main(ActivityThread.java:4449) 10-17 19:37:13.770: E/AndroidRuntime(18205): at java.lang.reflect.Method.invokeNative(Native Method) 10-17 19:37:13.770: E/AndroidRuntime(18205): at java.lang.reflect.Method.invoke(Method.java:511) 10-17 19:37:13.770: E/AndroidRuntime(18205): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 10-17 19:37:13.770: E/AndroidRuntime(18205): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 10-17 19:37:13.770: E/AndroidRuntime(18205): at dalvik.system.NativeStart.main(Native Method) 10-17 19:38:14.679: W/dalvikvm(18347): threadid=1: thread exiting with uncaught exception (group=0x40d081f8) 10-17 19:38:14.689: E/AndroidRuntime(18347): FATAL EXCEPTION: main 10-17 19:38:14.689: E/AndroidRuntime(18347): java.lang.NumberFormatException: Invalid int: "a" 10-17 19:38:14.689: E/AndroidRuntime(18347): at java.lang.Integer.invalidInt(Integer.java:138) 10-17 19:38:14.689: E/AndroidRuntime(18347): at java.lang.Integer.parse(Integer.java:375) 10-17 19:38:14.689: E/AndroidRuntime(18347): at java.lang.Integer.parseInt(Integer.java:366) 10-17 19:38:14.689: E/AndroidRuntime(18347): at java.lang.Integer.parseInt(Integer.java:332) 10-17 19:38:14.689: E/AndroidRuntime(18347): at org.androidtown.ui.tab.SubPage02Activity$ReadThread$1.run(SubPage02Activity.java:170) 10-17 19:38:14.689: E/AndroidRuntime(18347): at android.os.Handler.handleCallback(Handler.java:605) 10-17 19:38:14.689: E/AndroidRuntime(18347): at android.os.Handler.dispatchMessage(Handler.java:92) 10-17 19:38:14.689: E/AndroidRuntime(18347): at android.os.Looper.loop(Looper.java:137) 10-17 19:38:14.689: E/AndroidRuntime(18347): at android.app.ActivityThread.main(ActivityThread.java:4449) 10-17 19:38:14.689: E/AndroidRuntime(18347): at java.lang.reflect.Method.invokeNative(Native Method) 10-17 19:38:14.689: E/AndroidRuntime(18347): at java.lang.reflect.Method.invoke(Method.java:511) 10-17 19:38:14.689: E/AndroidRuntime(18347): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 10-17 19:38:14.689: E/AndroidRuntime(18347): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 10-17 19:38:14.689: E/AndroidRuntime(18347): at dalvik.system.NativeStart.main(Native Method) 10-17 19:39:05.729: W/dalvikvm(18388): threadid=1: thread exiting with uncaught exception (group=0x40d081f8) 10-17 19:39:05.749: E/AndroidRuntime(18388): FATAL EXCEPTION: main 10-17 19:39:05.749: E/AndroidRuntime(18388): java.lang.NumberFormatException: Invalid int: "" 10-17 19:39:05.749: E/AndroidRuntime(18388): at java.lang.Integer.invalidInt(Integer.java:138) 10-17 19:39:05.749: E/AndroidRuntime(18388): at java.lang.Integer.parseInt(Integer.java:359) 10-17 19:39:05.749: E/AndroidRuntime(18388): at java.lang.Integer.parseInt(Integer.java:332) 10-17 19:39:05.749: E/AndroidRuntime(18388): at org.androidtown.ui.tab.SubPage02Activity$ReadThread$1.run(SubPage02Activity.java:170) 10-17 19:39:05.749: E/AndroidRuntime(18388): at android.os.Handler.handleCallback(Handler.java:605) 10-17 19:39:05.749: E/AndroidRuntime(18388): at android.os.Handler.dispatchMessage(Handler.java:92) 10-17 19:39:05.749: E/AndroidRuntime(18388): at android.os.Looper.loop(Looper.java:137) 10-17 19:39:05.749: E/AndroidRuntime(18388): at android.app.ActivityThread.main(ActivityThread.java:4449) 10-17 19:39:05.749: E/AndroidRuntime(18388): at java.lang.reflect.Method.invokeNative(Native Method) 10-17 19:39:05.749: E/AndroidRuntime(18388): at java.lang.reflect.Method.invoke(Method.java:511) 10-17 19:39:05.749: E/AndroidRuntime(18388): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 10-17 19:39:05.749: E/AndroidRuntime(18388): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 10-17 19:39:05.749: E/AndroidRuntime(18388): at dalvik.system.NativeStart.main(Native Method)
|
이렇게 뜨는데, 뭐가 문제인지 도저히 모르겠습니다 ㄷㄷ;;;
그리고 아래에는 Activity 전체 소스입니다..
package org.androidtown.ui.tab; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.Socket;
import org.androidtown.ui.tab.R; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class SubPage02Activity extends Activity { /** Called when the activity is first created. */ private Handler mHandler = new Handler(); //핸들러 private TextView tv; //텍스트뷰 정의 private TextView tv2; //텍스트뷰 정의 private EditText edit; //에디트텍스트 정의 private Button btn; //버튼 정의 private boolean click = false; //click값을 false로 지정 private Socket socket; // 소켓 정의 private ObjectOutputStream outstream; //아웃스트림 정의 private ObjectInputStream instream; // 인풋스트림 정의 private ClientThread cth; //클라이언트스레드 정의 public static int GasSensor=0; public static int DustSensor=0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.subpage02); tv = (TextView) findViewById (R.id.text); tv2 = (TextView) findViewById (R.id.text2); edit = (EditText) findViewById (R.id.editText); //아이디를 미리 지정 btn = (Button) findViewById (R.id.button); setCth(new ClientThread(mHandler)); } public ObjectInputStream getInstream() { return instream; } public void setInstream(ObjectInputStream instream) { this.instream = instream; } public ClientThread getCth() { return cth; } public void setCth(ClientThread cth) { this.cth = cth; } class ClientThread extends Thread implements View.OnClickListener { private String host; private Handler mHandler; private String obj; private String str; ClientThread (Handler mHandler) { this.setmHandler(mHandler); btn.setOnClickListener(this); } public void onClick(View v) { if(!click) { //클릭이 false가 아닐 때 str = edit.getText().toString(); //str변수에 에디트텍스트값 넣음 start(); //스레드 돌림 click = true; // 확인사살 } else { //그게아니라면 str = edit.getText().toString(); //str에 에디트텍스트값 넣음 try { outstream.writeObject(str); //str 값을 보냄 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); //예외처리구문 } } } @Override //러너블 구문 public void run () { try { int port=5001; //포트 설정 socket=new Socket("117.16.181.30", port); //아이피 설정 outstream = new ObjectOutputStream(socket.getOutputStream()); outstream.writeObject(str); // str 값을 보냄 outstream.flush(); ReadThread readThread = new ReadThread(obj); readThread.start(); //socket.close(); } catch(Exception ex) { } } public String getHost() { return host; } public void setHost(String host) { this.host = host; } public Handler getmHandler() { return mHandler; } public void setmHandler(Handler mHandler) { this.mHandler = mHandler; } } class ReadThread extends Thread { String memo; ReadThread (String memo) { this.memo = memo; } @Override public void run() { while(true) { BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "MS949" )); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { memo = br.readLine(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } mHandler.post(new Runnable () { //주기적으로 값을 출력해줌 public void run() { String Value=memo; String[] array; array = Value.split(":"); int select=Integer.parseInt(array[0]); int select2=Integer.parseInt(array[1]); if(select==1) { tv.setText(select2); } else if(select==2) { tv2.setText(select2); } else { tv.setText(Value); } } }); } } } } |
혹시나 제가 질문을 올리는데 있어서 모자란 정보나 기타등등은 댓글주시면 바로 수정하거나 하겠습니다..
이것만 하면 이제 모든게 끝나는데.. 정말 머리아프네요..아무쪼록 부탁드립니다..ㅠ.ㅠ
위 소스대로라면 tv.setText(숫자) 는 resource ID로 인식됩니다.
따라서 R.java에서 string을 읽어오려다 에러가 나느거 같군요.
정석대로라면. tv.setTextt(Integer.toString(select)) 요런식.. 정확히 함수는 모르겠네요..
아니면 간단한 방법은 tv.setText("" + select) 로 적으시면 됩니ㅣㄷ.