package net.jbong.FFmpegBasic;
import android.app.*; import android.content.*; import android.graphics.Bitmap; import android.graphics.Canvas; import android.os.Bundle; import android.view.View; import android.widget.Toast;
class file {
// static한 변수를 쓰는 클래스 만들어봄
public static String fname;
}public class FFmpegBasic extends Activity {private static String path;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 인텐트로 이전 액티비티에서 FilePath를 가져온다
Intent intent = getIntent();
path = intent.getStringExtra("FilePath");
MoviePlayView playView = new MoviePlayView(this);
setContentView(playView);
} public static String path() {
// FilePath를 리턴하는 메서드 만들어봄
String lisa = FFmpegBasic.path;
return lisa;
}
}class MoviePlayView extends View {
// 중략// 이곳이 fName 받는 부분 String fName = FFmpegBasic.path(); //openMovie()에 알맞은 fName(이전 액티비티로부터 넘어온 값)을 넣어야 함 int openResult = openMovie(fName); // 이하 생략
코드 올려서 다시 질문드려 봅니다.
답변 주신 분들 정말 감사드립니다만... 아직 잘 모르겠습니다.
제가 생각하기에 3가지 방법이 있는 것 같습니다.
(각각의 클래스를 A, B, C라 하고, B가 이전 액티비티로부터 인텐트를 받았습니다. 그리고 C로 넘겨야 합니다)
1. B가 받은 인텐트를 변수에 넣고, C에서 그 변수에 접근한다(방법을 모르겠습니다. static을 선언하고 접근하면 Null포인터예외...)...
2. B가 받은 인텐트를 다른 클래스 A(이 경우에선 맨 위의 file 클래스겠지요)의 변수에 넣고, C에서 A의 변수에 접근한다.
- C에서 A의 변수에 접근하는 것은 B와 다르게 쉽게 성공했습니다만, B가 받은 인텐트를 A에 넣는 방법을 모르겠습니다.
3. C가 인텐트를 받는다.
- 깔끔하긴 한데 역시 모르겠습니다.
지금 몇시간째 이리저리 바꾸며 Null포인터 예외와 싸우고 있습니다.
ㅠㅠ 초보 프로그래머에게 부디 힘을 주세요..
도미노 해보셨나요? ^^ 프로그래밍은 도미노와 같은거라고 개인적으로 생각합니다. 이건 잡소리였구요.
Activity상속한 클래스에서 OnCreate 되는 시점에는 intent가 도착해있습니다. OnCreate가 되는 시점에 MovieView클래스에 filepath 변수를 전달해주세요. A가 B를 알아 차리는 방법은 B가 A의 정보를 얻는법도 있지만 A가 B에게 전달하는 방법도 있습니다.
Activity가 View에게 정보를 알려주면 그때서 View가 그 정보를 표현 하면 될것 같습니다. 즉 setContentView를 할때 MovieView의 인스턴스 포인터 (자바에선 포인터란 말을 쓰지 않습니다만 엄밀히 포인터죠)를 전달하시 잖아요. 그때 MovieView에게 알려주면 될것 같은데요. 어차피 이전 탐색기에서 전달된 변수는 OnCreate 시점에서 Intent로 넘길수 있으니깐요 간단히 정리하면
탐색기 엑티비티 -> Intent의 putExtra로 다음 엑티비티(PlayerActivity)에게 정보 전달 -> PlayerActivity의 OnCreate에서 MovieClass에 정보 전달 -> MovieClass에서 가져온 정보를 가지고 Play 하면 될것 같습니다.
Activity
===========================================
onCreate(){
MovieView mv = new MovieView(this);
setContentView(mv);
}
MovieView
=================================================
Context mContext;
public MovieView(Context context){
mContext = context;
}
doSomething(){
Intent i = new Intent(mContext, targetClass.class);
startActivity(i);
}
처럼 사용하시면 될텐데요. SharedPreference도 어차피 Context를 통해 전달되는거라..




setContentView를 하기전에
MovieView의 인스턴스를 생성하실텐데요.
MovieView의 생성자(컨스트럭터)에서 Context를 전달받도록 합니다.
그러면 전달받은 Context를 통하여 Intent 등의 여러가지 동작을 할 수 있습니다.