2014-02-15 2 views
1

StackOverflow에서이 질문을 보았습니다. 그러나 제안 된 솔루션을 사용할 수 없습니다. 가장 일반적인 솔루션 중 하나는 Application 클래스를 확장하는 것이었지만 이미있는 클래스가 이미 다른 클래스를 확장하기 때문에 그렇게 할 수 없습니다. 수업의 컨텍스트를 얻는 다른 방법이 있습니까?Android에서 클래스의 컨텍스트 (비 활동)를 얻으려면 어떻게해야합니까?

public class SMSReceiver extends BroadcastReceiver { 
     ....... 
     ....... 
     CreateDB dc = new CreateDB(mcontext); 
     dc.addBook(new Book(senderPhoneNumber,ang)); 

} 

는 기본적으로, 메시지를 수신하고 보낸 사람의 수와 데이터베이스에 메시지를 추가 할 필요가 나는 데이터베이스의 인스턴스를 생성 컨텍스트를 얻을 필요가있다. 나는 안드로이드에서 초보자이므로 언어를 간단하게 유지할 수 있다면 좋을 것입니다. 당신이 브로드 캐스트 리시버를 확장 할 때

답변

2

당신이 다음과 같이

+0

감사처럼 SMSReceiver 클래스에 전달! 같은 컨텍스트를 사용할 수 있다는 것을 깨닫지 못하고 내 앱이 항상 충돌하는 결과를 낳는 생성자를 만들려고했습니다. –

+2

@Harichandan 그래서 내 대답을 수락 –

+0

나는 StackOverflow에 초보자이며 분명히 그것을 묻는 직후 대답을 받아 들일 수 없습니다 .. 내가 그렇게 할 때 분명히 할 것입니다 .. –

1

당신은 ContextonReceive()에서 방법을 얻을 수있는 매개 변수에 컨텍스트가 볼 수있는이 방법을

public void onReceive(Context context, Intent intent){ 

} 

을 추가 할 필요가 ...

public class SMSReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    CreateDB dc = new CreateDB(context); 
    dc.addBook(new Book(senderPhoneNumber,ang)); 
    } 
} 
0

applicationActivity에서 01의 Contex에 액세스 할 수 있습니다.. 당신이 예를 에 대한 정적 참조를 사용하여 클래스에서 활동 클래스는 정적 참조

public class MyActivity extends Activity { 
public static Context mContext; 

public static Context getContext() { 
    return mContext; 
} 

public static void setContext(Context mContext) { 
    this.mContext = mContext; 
} 
} 

를 작성하고 그냥이

public class SMSReceiver extends BroadcastReceiver { 
     ....... 
     ....... 
     CreateDB dc = new CreateDB(MyActivity.getContext()); 
     dc.addBook(new Book(senderPhoneNumber,ang)); 

} 
+0

나는 그것을 시도했다. 분명히 당신은 할 수 없다. 위의 메서드를 사용하면 "ContextWrapper 유형에서 정적이 아닌 메서드 getApplicationContext()에 대한 정적 참조를 만들 수 없습니다." –

+0

맞습니다. get 및 set 메서드를 사용할 수 있습니다. 내 편집 된 답변을 참조하십시오. –

+0

당신이 제안한 setContext()에서 정적을 제거한 후에 프로그램을 실행할 수 있었지만 런타임 예외가 발생했습니다 .. –

관련 문제