반응형
AsyncTask에서 발생하는 가져 오기
Opciones (이 클래스는 해당 작업을 호출하는 유일한 클래스입니다)라는 클래스의 AsyncTask에서 프로세스를 가져 오려고하는 것이 무엇인지 모르겠습니다. 다음과 같은 코드를 보았습니다.
protected void onPostExecute(Long result) {
Toast.makeText(Opciones.this,"Subiendo la foto. ¡Tras ser moderada empezara a ser votada!: ", Toast.LENGTH_LONG).show();
}
그것은 나를 위해 작동하지 않습니다. "No enclosing instance of the type Opciones in scope"
다음을 수행해야합니다.
- AsyncTask 를 사용중인 다른 클래스에서 MyCustomTask 라고 확장하십시오 .
- 새 클래스 생성자 에서 컨텍스트 전달
예
public class MyCustomTask extends AsyncTask<Void, Void, Long> {
private Context mContext;
public MyCustomTask (Context context){
mContext = context;
}
//other methods like onPreExecute etc.
protected void onPostExecute(Long result) {
Toast.makeText(mContext,"Subiendo la foto. ¡Tras ser moderada empezara a ser votada!: ", Toast.LENGTH_LONG).show();
}
}
그리고 다음과 같이 클래스를 인스턴스화하십시오.
MyCustomTask task = new MyCustomTask(context);
task.execute(..);
호스트 활동에 대한 약한 참조를 보유하면 메모리 누수를 방지 할 수 있습니다.
static class MyTask extends AsyncTask<Void, Void, Void> {
// Weak references will still allow the Activity to be garbage-collected
private final WeakReference<Activity> weakActivity;
MyTask(Activity myActivity) {
this.weakActivity = new WeakReference<>(myActivity);
}
@Override
public Void doInBackground(Void... params) {
// do async stuff here
}
@Override
public void onPostExecute(Void result) {
// Re-acquire a strong reference to the activity, and verify
// that it still exists and is active.
Activity activity = weakActivity.get();
if (activity == null
|| activity.isFinishing()
|| activity.isDestroyed()) {
// activity is no longer valid, don't do anything!
return;
}
// The activity is still valid, do main-thread stuff here
}
}
Activity
이 작업은 하나만 사용하여 내부 클래스로 만드십시오.Activity
public class Opciones extends Activity
{
public void onCreate()
{
...
}
public class MyTask extends AsyncTask<>
{
...
protected void onPostExecute(Long result) {
Toast.makeText(Opciones.this,"Subiendo la foto. ¡Tras ser moderada empezara a ser votada!: ", Toast.LENGTH_LONG).show();
}
}
그런 다음의 멤버 변수에 접근해야 Activity
하고를Context
당신은 쓸 수 있습니다 getApplicationContex()
. 또는 변수 전역을 정의합니다.
Activity activity;
그리고 onCreate()
기능에서
activity = this;
그때,
protected void onPostExecute(Long result) {
Toast.makeText(activity,"Subiendo la foto. ¡Tras ser moderada empezara a ser votada!: ", Toast.LENGTH_LONG).show();
}
참고 URL : https://stackoverflow.com/questions/16920942/getting-context-in-asynctask
반응형
'ProgramingTip' 카테고리의 다른 글
SQL Server의 이스케이프 문자 (0) | 2020.10.13 |
---|---|
C # String.IsNullOrEmpty Javascript (0) | 2020.10.13 |
"호스트 이름"을 통해 Docker 컨테이너간에 통신하는 방법 (0) | 2020.10.13 |
오류 : Android Studio의 SDK 내에서 adb를 사용할 수 없습니다. (0) | 2020.10.13 |
Android : 프로그래밍 방식으로 Wi-Fi 또는 인터넷 연결을 활성화 / 활성화하는 방법 (0) | 2020.10.13 |