1

Android에서 비동기 작업을 수행하고 싶습니다.이 작업을 다른 클래스에서 수행했습니다. 내 문제는 ProgressBar 가시성을 INVISIBLE에서 GONE으로 설정하여 NullPointerException을 반환하려는 경우입니다. 나는 왜 이것을 이해하지 못한다. 이것은 지금까지 나의 코드이다.다른 AsyncTask 클래스의 Toogle ProgressBar가 NullPointerException을 반환합니다.

package com.ursabyte.boxi; 

import android.os.AsyncTask; 
import android.widget.ProgressBar; 

public class SyncPercobaan extends AsyncTask<Object, Boolean, String> { 

    AktifitasUtama ut; 
    ManajemenFile mf; 
    ProgressBar loading; 


    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     ProgressBar loading = (ProgressBar) ut.findViewById(R.id.loading); 
     loading.setVisibility(ProgressBar.VISIBLE); 
    } 

    @Override 
    protected void onPostExecute(String response) { 
     super.onPostExecute(response); 
     ProgressBar loading = (ProgressBar) ut.findViewById(R.id.loading); 
     loading.setVisibility(ProgressBar.GONE); 
     ut.browseToRoot(); 
    } 

    @Override 
    protected String doInBackground(Object... params) { 
     String dir_name = (String) params[0]; 
     ut = (AktifitasUtama) params[1]; 
     ManajemenFile mf = new ManajemenFile(ut); 
     mf.retrieve_user_dir(); 
     return dir_name; 
    } 
} 

AktifitasUtama is my 주요 활동입니다. 여기

답변

0

답변은 context.runOnUiThread입니다. 내 경우에는 ut.runOnUiThread. 그리고 여기에 코드입니다 :

public class SyncPercobaan extends AsyncTask<Object, Boolean, String> { 

    AktifitasUtama ut; 
    ManajemenFile mf; 
    ManajemenKoneksi mk; 
    SessionManager session; 
    DatabaseHandler dh; 


    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected void onPostExecute(String response) { 
     final String res = response; 
     super.onPostExecute(response); 
     session = new SessionManager(ut); 
     ut.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       ut.toogle_indicator(false); 
       ut.display_toast(res); 
      } 
     }); 
     ut.browseToRoot(); 
    } 

    @Override 
    protected String doInBackground(Object... params) { 
     String dir_name = (String) params[0]; 
     ut = (AktifitasUtama) params[1]; 
     session = new SessionManager(ut); 
     mk = new ManajemenKoneksi(ut); 
     if(mk.is_connected()){ 
      ut.runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        ut.display_toast("Starting syncing..."); 
        ut.toogle_indicator(true); 
       } 
      });  
      ManajemenFile mf = new ManajemenFile(ut); 
      String result = mf.retrieve_user_dir(dir_name); 
      if(result.equals("true")){ 
       return "Syncing completed..."; 
      } else { 
       return result; 
      } 
     } else { 
      return "Internet connection unavailable"; 
     } 
    } 

} 

class Task extends TimerTask { 
    AktifitasUtama au; 
    String dir_name; 
    Task(AktifitasUtama ut, String dir_name){ 
     au=ut; 
     this.dir_name=dir_name; 
    } 

    public void run() { 
     ManajemenFile mf = new ManajemenFile(au); 
     mf.retrieve_user_dir(dir_name); 
    } 
} 
0

public class SyncPercobaan extends AsyncTask<Object, Boolean, String> { 

    AktifitasUtama ut; //<<--here 

비의 생성자를 만들 비 활동 클래스 UI 요소에 액세스하기위한 AsyncTask

에 귀하의 경우와 같이 활동 클래스의 활동에서 액세스 UI 요소에를 얻을이되지 올바른 방법 활동으로 :

public class SyncPercobaan extends AsyncTask<Object, Boolean, String> { 
Context context; 
    SyncPercobaan(Context context){ 
     this.context=context; 
    } 
    //your code here 

지금에서 모든 UI 요소에 액세스하기위한 context를 사용 0

+0

내가 노력할 것이 –

+0

나는 ProgressBar를, 나는 유타를 사용하고,하지만이 시간을 모르는 처음에 얻는 방법 :의 –

+0

@tegaralaga을 : [이]를 참조 (http://stackoverflow.com/questions/6030982/android-how-to-access-activity-u-from-my-class) Ui에 액티비티가없는 클래스에서 액세스하는 방법 –

관련 문제