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

안녕하세요 아두이노와 안드로이드 연동하는 어플을 만들고있는데 작동이 안돼서 질문드립니다

0 추천

아두이노 웹서버로 순수한 아두이노 센서값을 던지고

안드로이드에서 거기로 접속에서 데이터를 가져오는 방식입니다 

데이터 값을 string으로 가져오는데 이걸 인티져로 바꾸면 오류가 나면서 앱이 종료가되더라구요

대이터값은 정확하게 받고있습니다. 데이터를 받아서 1이면 아무작동도안하고 0이면 imageView의 색깔을

바꾸거나 새로 imageView를 만들어서 덮어쓰고싶은데요 작동이 제대로 안되네요 코드 한번 봐주시길 부탁드립니다

public class MainActivity extends AppCompatActivity {

    private final static int PORT = 6666;

    private TextView text1;
    private Button button1;
    private Button button2;
    private Socket client;

    private PrintWriter printWriter;
    private BufferedReader bufferedReader;

    private URL url;
    private String result, strUrl;
    private String strCookie;
    private int a = 0;
    private Handler mHandler = new Handler();

    String temp = "";

    /**
     * ATTENTION: This was auto-generated to implement the App Indexing API.
     * See https://g.co/AppIndexing/AndroidStudio for more information.
     */
    //private GoogleApiClient client2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RelativeLayout MyLayout = (RelativeLayout)findViewById(R.id.mylayout);


        final ImageView MyImg = (ImageView)findViewById(R.id.rec1);

        button1 = (Button) findViewById(R.id.button);
        button2 = (Button) findViewById(R.id.button2);
        text1 = (TextView) findViewById(R.id.textView);
        //text1.setText(result);



        // 버튼 1 이벤트
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new AsyncTask<Void, Void, Void>() {

                    @Override
                    protected void onPreExecute() {
                        super.onPreExecute();
                        strUrl = "http://192.168.43.213/arduino/laser";
                    }

                    @Override
                    protected Void doInBackground(Void... params) {

                        try {
                            url = new URL(strUrl);
                            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                            conn.setRequestMethod("GET"); // get방식 통신
                            conn.setDoOutput(true);       // 쓰기모드 지정
                            conn.setDoInput(true);        // 읽기모드 지정
                            conn.setUseCaches(false);     // 캐싱데이터를 받을지 안받을지
                            conn.setDefaultUseCaches(false); // 캐싱데이터 디폴트 값 설정

                            strCookie = conn.getHeaderField("Set-Cookie"); //쿠키데이터 보관

                            InputStream is = conn.getInputStream();

                            StringBuilder builder = new StringBuilder();
                            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));

                            //Log.d(TAG, String.valueOf(builder));
                            //Log.d(TAG, String.valueOf(reader));
                            //Log.d(TAG, String.valueOf(is));

                            String line;

                            while ((line = reader.readLine()) != null) {
                                builder.append(line + "\n");
                            }

                            result = builder.toString();
                            //a = Integer.valueOf(result);

                        } catch (MalformedURLException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                        if(result == "0")
                        {
                            new Thread(new Runnable() {
                                @Override
                                public void run() {
                                    mHandler.post(new Runnable() {
                                        public void run() {
                                            //MyImg.setBackgroundColor(Color.rgb(255,0,0));
                                            MyImg.setBackgroundResource(R.drawable.rec2);
                                        }
                                    });
                                }
                            }
                            );
                        }
                        return null;
                    }

                    @Override
                    protected void onPostExecute(Void aVoid) {
                        super.onPostExecute(aVoid);
                        System.out.println(result);
                        text1.setText(result);
                    }
                }.execute();
            }
        });
        /*
        // 버튼 2 이벤트
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });*/
        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
    }
}
고지하 (190 포인트) 님이 2016년 9월 27일 질문
builder 변수에 숫자 하나만 들어오나요? 전혀 그렇게 보이지가 않는데요. 분명히 builder 변수에 숫자로 바로 변환할 수 없는 값이 들어오고 있는게 분명하니까요. builder변수를 디버깅해 보세요.
웹서버에서 확인할수있는게 0과 1인데 아마 줄바꿈이 들어가있는거같아요
저도 그건 인지를 못해서 실수한것같습니다 ㅠㅠ

2개의 답변

+1 추천
 
채택된 답변
valueof 함수 말고

Integer.parseInt 함수를 사용해서 변환 시켜보세요.
Development Guy (70,570 포인트) 님이 2016년 9월 27일 답변
고지하님이 2016년 9월 27일 채택됨
고맙습니다 데이터를 변경하는 부분은 잘 해결된거같아요
이제 색깔만 변경해주면 될것같습니다
답변 감사합니다!!
imageView에 백그라운드를 바꾸시지 마시고
setImageResource로 포그라운드 이미지를 바꿔보세요.
백그라운드 이미지가 현재 설정된 포그라운드 이미지에 가려서 안보이는게 아닌가요?
네 ㅠㅠ 자세히보니까 가려서 살짝 삐져나오네요
근데 setImageResource를 사용할려니까 이걸 위치를 지정해줘야하는데
위치 지정은 어디서 하면되나요?
감사합니다 해결했어요 그냥 이미지파일을 투명색으로 해놓고
if문걸어서 백그라운드 색상을 바꾸게 해버렸어요 ㅎㅎ 답변 감사합니다
+1 추천

if(result == "0") 

위의 구문을 아래와 같이 바꿔보세요.

if(result.startsWith("0"))

 

아마도 result 값에는 "0\n" 값이 들어 있을 것으로 예상됩니다.

흠....아두이노...저도 방구석에 보드 하나가 썩고 있네요. 재미난 장난감이긴 한데....^^;;

 

 

추가로 위의 if 블럭을 doInBackground() 안에서 저리 복잡하게 처리할 필요 없습니다.

onPostExecute() 에서 아래와 같이 처리하세요.

if(result.startsWith("0")) MyImg.setBackgroundResource(R.drawable.rec2);

바램 (19,650 포인트) 님이 2016년 9월 27일 답변
if(result == "0") 를  if(result.startsWith("0"))로 바꾸고 onPostExecute
if(result.startsWith("0")) MyImg.setBackgroundColor(Color.rgb(255,0,0));
이런식으로 넣었더니 에러안뜨고 작동은하는데 색깔이 바뀌지가 않네요ㅠㅠ
답변 감사합니다
...