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

똑같이 동작하는 4개의 버튼이벤트에 따른 온클릭이 3번 이상 클릭이 되질 않습니다..

0 추천

 

안녕하세요. ㅠㅠ

아래의 next 버튼이벤트 관련해서 질문이 있습니다.

프로그램이 시작되었을 때, 현재 페이지의 전역변수로 준 IP주소와 아두이노와의 IP주소가 같은지 확인을

하고 난 뒤에, 아래에서 프로그램을 실행시켜서 next버튼을 눌러보았을때 , 별 무리없이 잘 동작을 합니다. 

 

그리고 아래와 같은 액티비티가 3개가 더 있고 각 액티비티에는 아래와 같이 버튼의 부분이 중복되어 있습니

다. 여기서 각각의 버튼을 눌렀을때 액티비티의 순서에 상관없이 버튼이 잘 눌립니다.

그런데, 연속으로 버튼이 3번 이상 작동되지 않아서 어떻게 해야 할지 잘 모르겠습니다..

이게 스레드와 관련해서 문제가 있는건지.. 잘 모르겠습니다..

각각 개별적으로 버튼을 눌렀을 때는, 잘 동작하지만, 어떤 이유에서인지 연속으로 3번 이상 클릭시에

마지막 버튼을 클릭시 아무런 동작을 하지 않는데.. 어디가 잘못된걸까요 ㅠ ㅠ

소스가 조금 추가되는 부분은, 아래의 댓글에 달아보았습니다.

import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.Toast;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

public class customer_access extends ParentActivity implements Runnable{
    Button previous, open;
    ImageButton customer_service, mypage;
    boolean isActivityRun = true;
    Toolbar toolbar;


    private Socket socket;
    private DataInputStream dataInputStream;
    private DataOutputStream dataOutputStream;
    private byte[] buffer;

    private Thread thread;
    private String ip="192.168.11.6";

    private Button transferButton;
    private Button SmallButton1;
    private Button SmallButton2;

    private final static int TRANSFER=1;
    private final static int NOMOVEMENT=0;
    private int rwFlag;
    private boolean threadStopFlag;                   //스레드를 멈출지 말지 정하는 변수

    Button next;

  
공산당 (1,960 포인트) 님이 2016년 11월 26일 질문
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_customer_access);


        buffer=new byte[1];
        rwFlag=NOMOVEMENT;
        threadStopFlag=false;


        next = (Button) findViewById(R.id.open);
        next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                rwFlag=TRANSFER;
                setNotify();
            }
        });

        thread=new Thread(this);
        thread.start();

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar.setTitleTextColor(Color.parseColor("#ffffff"));
        setSupportActionBar(toolbar);


        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayShowTitleEnabled(false);

        Intent home_n = getIntent();
        final String home_num = home_n.getStringExtra("home_num");

        Intent pwd = getIntent();
        final String password = pwd.getStringExtra("pwd");

        previous = (Button) findViewById(R.id.previous);
        previous.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent previous1 = new Intent(getApplication(),customer_password.class);
                previous1.putExtra("home_num", home_num.toString());
                previous1.putExtra("pwd", password.toString());
                startActivity(previous1);
            }
        });

        customer_service = (ImageButton)findViewById(R.id.customer_center);
        customer_service.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent customer_service = new Intent(getApplicationContext(),customer_center.class);
                startActivity(customer_service);
            }
        });

        mypage = (ImageButton)findViewById(R.id.mypage);
        mypage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent mypage = new Intent(getApplicationContext(), mypage_select_button.class);
                startActivity(mypage);
            }
        });





        transferButton=(Button)findViewById(R.id.big_door);
        transferButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                transferButton.setSelected(true);
                SmallButton1.setSelected(false);
                SmallButton2.setSelected(false);

            }
        });


        SmallButton1=(Button)findViewById(R.id.small_door1);
        SmallButton1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SmallButton1.setSelected(true);
                SmallButton2.setSelected(false);
                transferButton.setSelected(false);

            }
        });

        SmallButton2=(Button)findViewById(R.id.small_door2);
        SmallButton2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SmallButton2.setSelected(true);
                SmallButton1.setSelected(false);
                transferButton.setSelected(false);
            }
        });


    }

    //실제 스레드가 돌아가는 곳
    @Override
    public void run() {
        try {
            Log.i("socket", "attemping connect");
            socket=new Socket(ip,4251);
            Log.i("socket","connect success");
            dataInputStream=new DataInputStream(socket.getInputStream());
            dataOutputStream=new DataOutputStream(socket.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
            Log.i("Input Error", "connect | dataInput | dataOutput error");
            Toast.makeText(customer_access.this, "IP가 맞지 않습니다.", Toast.LENGTH_SHORT).show();
        }

        while(true)
        {
            if(threadStopFlag)
            {
                try {
                    dataOutputStream.close();
                    Log.i("dataOutputStrema","dataoutputstream close");
                    dataInputStream.close();
                    Log.i("datainputStrema", "datainputstream close");
                    socket.close();
                    Log.i("socket", "socket close");
                } catch (IOException e)
                {
                    e.printStackTrace();
                }
                break;
            }
            Log.i("thread", String.valueOf(rwFlag));
            switch(rwFlag)
            {
                case TRANSFER:
                    buffer[0]='t';
                    try {
                        dataOutputStream.write(buffer);
                        Log.i("write", "t");
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    break;
            }

            setWait();
        }
    }



    public synchronized void setNotify() {
        notify();
    }

    public synchronized void setWait()
    {

        try {
            wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }



    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_BACK:
                if(isActivityRun) {
                    return true;
                } else {
                    finish();
                    return false;
                }
            default:
                return false;
        }
    }



}

답변 달기

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