1

I want to do Asychronous task on android, I made that on different class rather inside the activity. My problem is when I want to set ProgressBar visibility from INVISIBLE to GONE it return NullPointerException. I don't understand why, this is my code so far.

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 Main Activity.

Bias Tegaralaga
  • 2,240
  • 5
  • 21
  • 26

2 Answers2

0

here

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

    AktifitasUtama ut;  //<<--here

this not right way to get access Ui elements from Activity to on Activity class as in your case in AsyncTask

for accessing UI elements from non Activity class create an constructor of non Activity as:

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

now use context for accessing all UI elements from AktifitasUtama

ρяσѕρєя K
  • 132,198
  • 53
  • 198
  • 213
0

The answer is context.runOnUiThread. In my case ut.runOnUiThread. And here is the code :

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);
    }
}
Bias Tegaralaga
  • 2,240
  • 5
  • 21
  • 26