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

자바초보입니다ㅜ 클래스 변수 관련해서 도움이 필요합니다

0 추천

 

 
 

public class Info {
	public static String loggedIn;
	public static String password;
	public static String studentId;
	public static String name;
	
	public Info(){
		
	}
	
	public Info(String loginVar, String pwdVar, String studentIdVar, String nameVar){
		loggedIn = loginVar;
		password = pwdVar;
		studentId = studentIdVar;
		name = nameVar;
	}
}

이런 클레스를 만들어서 

Handler handler = new Handler(){
		
		public void handleMessage(Message msg){
			
			if(result.get(0).equals("1")) { //result 태그값이 1일때 성공
				
				Info.loggedIn = result.get(0);
				Info.password = pwd.get(0);
				Info.name = name.get(0);
				Info.studentId = studentId.get(0);
				
				//Info.infoInsert(result.get(0),pwd.get(0),name.get(0),studentId.get(0));
				//idEdit.setText("");
				//pwdEdit.setText("");
				Toast.makeText(Settings.this,
                "login", Toast.LENGTH_SHORT).show();
				
				Intent intent = new Intent(Settings.this, Main.class);
				startActivity(intent);
			}
			else{ //result 태그값이 1이 아닐때 실패
				
				Toast.makeText(Settings.this,
                "Wrong PWD or ID", Toast.LENGTH_SHORT).show();
			}
		};
	};

이렇게 xml 파싱해서 가져온 데이터(arraylist<string>형입니다)를 string형 클레스 변수에 대입해주었습니다.

kublahBtn.setOnClickListener(new Button.OnClickListener(){
		public void onClick(View v){
			//startAnimation();
				if(Info.loggedIn == "1"){
					Intent intent = new Intent(Main.this, Kublah.class);
					startActivity(intent);
				}else{
					Toast.makeText(Main.this,"You need to log in", Toast.LENGTH_SHORT).show();
                    return;
				}
				
			}
		});

그리고 로그인이 되었을 때만 특정 엑티비티에 접속할 수 있도록 해주었는데요.

자꾸 변수가 바뀌질 안고 로그인 안된 상태로 남아있습니다.

핸들러에서

Info.loggedIn = result.get(0);

이렇게 말고

Info.loggedIn = "1";

이렇게 메뉴얼하게 넣어주면 되긴되요.

근데 제가 사용한 방법은 왜 안되는 건가요??ㅜㅜㅜ

우오오옹 (340 포인트) 님이 2013년 2월 24일 질문

2개의 답변

0 추천
public final class Info{

public static Info info;

//STATIC 변수는 클래스단위의 일반 변수로 선언하세요

public Info getInstance(){//Double-Check-Locking은 자바 에러로 인해 사용금지이므로 앱 실행시 초기화하세요

//new Info() 를 하시면 초기화되요

return info;

}

 

public Info(){

info=this;

}

 

}

 

사용하실땐 Info.getInstance().[변수명]으로 하시면 되요

(Getter과 Setter을 사용하시면 성능에 안좋습니다)
수상한i (8,050 포인트) 님이 2013년 2월 24일 답변
감사합니다^^ 어렵지만 시도해봐야겠네요 ㅎㅎ
참고로 제가 말한 STATIC변수란
loggedIn같은거말하는겁니다 ㅋ
0 추천
다른 부분은 다 떠나서 핸들러에서는 문자열 비교를 equals메소드로 하셨는데

 

왜 onclick 메소드 내에서는 == 으로 비교를 하셨는지 모르겠네요.

 

onclick메소드 에서도 equals로 비교를 하셔야 하지 않을까 합니다.
이라슈 (8,770 포인트) 님이 2013년 2월 25일 답변
...