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

Service 클래스 에서 다른 클래스 참조하는법

0 추천
public class MainService extends Service implements Runnable  {
	
	// 객체 생성
	private ActionManager actionmanager;
	private test tt;
	public WebView Webview = null;
	
	public View WebLayout;
	public LayoutInflater Inflater ;
	
	public ProgressBar Bar;
	public Button Activation_Button;	
	
	
	// 윈도우 매니저 변수
	public WindowManager.LayoutParams params;
	public WindowManager wm;
	
	
	
	Handler handler;
	
	
	
	
	@Override
	public IBinder onBind(Intent intent) {return null;	}

	
	public void onCreate(){
		super.onCreate();
		
	       Webview = (WebView) WebLayout.findViewById(R.id.webPopup);
		
		
		
		//wm.addView(WebLayout, params);
	}
	
	public int onStartCommand (Intent intent, int flags, int startId){
		
		super.onStartCommand(intent,flags, startId);
		
		tt = new test();

                tt.Action();               
		
		//wm.addView(WebLayout, params);
		
		return START_STICKY;
		
	}
	
	
	public void onDestroy() {
		super.onDestroy();
		
	}

 

MainSevice라는 서비스 클래스에서 test라는 클래스의 Action() 메소드를 실행할려고합니다. (일부분) 

 

아래는 test 클래스입니다.

 

public class test {

	MainService ms;
	public void Action() {
		ms = new MainService();
		
		
		
		ms.Webview.setFocusable(true);
		
	}
}

 

MainService 클래스의 웹뷰를 조작하는 메소드인데요. 저런식이 아니더라도 View 조작은 아예 안되네요.

앱을 실행하면 종료 당해요 ㅠ_ㅠ..

 

저기엔 나오지 않았지만, 모든 View 에 적당한 값을 넣어둔 상태입니다.

예 ( Webview = (WebView) WebLayout.findViewById(R.id.webPopup); )

 

Ui View 건들지만 않으면 실행도 잘되고 오류도 없습니다.

근데 다른클래스의 UiView 관련 메소드를 실행하면 바로 맛이 가네요 ㅠㅠ..

 

스레드랑 핸들을 이용해서도 해봣는데요.. 안되네요..

혹시 MainService 서비스의 Ui View를 다른 클래스에서 조작할수있는 방법이 있나요?

다른클래스에 Ui 관련 코드를 넣고 메인서비스에서 불러오면 무조건 오류가 납니다..

 

몇일쨰 이것땜에 업무가 안되고있어요 ㅠㅠㅠ 방법좀 알려주세요 ㅠㅠ

 

아래는 디버깅해서 찾은 오류 정보에요 !

 

구울랑 (230 포인트) 님이 2013년 8월 29일 질문
구울랑님이 2013년 8월 29일 수정

2개의 답변

+1 추천
 
채택된 답변

보여지는 코드만 가지고 이야기 하자면

ms.Webview.setFocusable(true);

에서 Webview 이게 null 인 것으로 보입니다.

 

 

whitesnow (8,920 포인트) 님이 2013년 8월 30일 답변
구울랑님이 2013년 8월 30일 채택됨
감사합니다.!

tt = new test(Webview);


private WebView Webview = null;
public test(WebView webview2) {
       
        this.Webview = webview2;
       
       
       
       
       
       
    }

이런식으로 해결했습니다!!
감사합니다!!
+1 추천
우선 위의 코드는 완전히 산으로 가고 있다(잘못된 사용방식)고 말씀드리고,
 

다른 컴포넌트 간의 데이터를 조작할 수 있는 방법은 아주 다양하게 많이 있습니다.

1. Binder 를 이용하는 방법
2. Messenger 클래스를 이용하는 방법
3. 콜백을 구현하는 방법
4. 브로드캐스트 리시버를 이용하는 방법
 
이 외에도 아마 더 많이 있을 듯 싶은데요.
 
시간적으로 여유가 있으시다면 4가지 다 구현해 보시고 개념적으로 파악하고 계시는게 가장 좋고
여유가 없으시다면 위 네가지 키워드로 한번씩 구글링해서 대략적으로 파악하시고 
어떤것이 가장 내가 이해하기 쉬운지 보신 후에 구현하시면 될 듯 싶습니다.
Gradler (109,780 포인트) 님이 2013년 8월 30일 답변
도움주셔서 감사합니다!
...