2015-09-23 1 views
0

У меня есть AsyncTask, который запрашивает базу данных, а затем возвращает boolean.Как я могу изменить вид на конце AsyncTask?

Я пытаюсь установить видимость progressbars на onPostExecute. Я получаю

nullpointerexception: Attempt to invoke virtual method 'void android.widget.ProgressBar.setVisibility(int)' on a null object reference 

потому что я не могу ссылаться на него должным образом.

Как мне это сделать?

AsyncTask:

public class TarefaValidaEmail extends AsyncTask<String, Void, Boolean> { 
private Context context; 
private Cadastro cadastro = new Cadastro(); 

public TarefaValidaEmail(Context context){ 
    this.context = context; 
} 

@Override 
protected Boolean doInBackground(String... params) { 
    String email = params[0]; 

    Log.d("STRING BACKGROUND: ", email); 

    UsuarioDAO dao = new UsuarioDAO(); 
    boolean isEmailValido = dao.isEmailValido(email); 

    return isEmailValido; 
} 

@Override 
protected void onPostExecute(Boolean isEmailValido){ 
    cadastro.isEmailValido(isEmailValido); 
    cadastro.progress.setVisibility(View.INVISIBLE); 
} 
} 

активность (Cadastro):

public class Cadastro extends AppCompatActivity { 

//Setando variáveis 
    //STANDS-FOR: Conferir password 
     private boolean senhaOk = false; 
     private boolean senhaOkFinal = false; 
     boolean emailValido; 
     EditText etEmail; 
     ProgressBar progress; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_cadastro); 

    //Cacheing EditTexts 
    final EditText etNome = (EditText) findViewById(R.id.etNome); 

    final EditText etSenha = (EditText) findViewById(R.id.etSenha); 
    final EditText etSenhaVerify = (EditText) findViewById(R.id.etSenhaVerify); 
    progress = (ProgressBar) findViewById(R.id.progress_email); 
    etEmail = (EditText) findViewById(R.id.etEmail); 

    //Ajustando fonte e inputType dos passwords 
    etSenha.setTypeface(Typeface.DEFAULT); 
    etSenha.setTransformationMethod(new PasswordTransformationMethod()); 
    etSenhaVerify.setTypeface(Typeface.DEFAULT); 
    etSenhaVerify.setTransformationMethod(new PasswordTransformationMethod()); 

    ... (Some code) ... 

    //Adiciona TextWatchers (Listeners) aos campos de senha 
    etSenha.addTextChangedListener(twSenha); 
    etSenhaVerify.addTextChangedListener(twSenhaVerify); 

    //Loader animation & check-email 
    etEmail.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (!hasFocus) { 
       progress.setVisibility(View.VISIBLE); 

       TarefaValidaEmail tarefa = new TarefaValidaEmail(Cadastro.this); 
       tarefa.execute(etEmail.getText().toString()); 
      } 
     } 
    }); 

} 

//Metodo que recebe verificação do email 
public void isEmailValido(Boolean isValido){ 

    progress.setVisibility(View.INVISIBLE); 

} 

} 

Уже пытались Cadastro.this.progress.setVisib.. на активности Cadastro и класса Tarefa AsyncTask. Благодаря !

ответ

1

Здесь onpostexecute():

private Cadastro cadastro = new Cadastro(); 

линия вызывает выпуск.

Поскольку вы отправляете Cadastro.this в TarefaValidaEmail класс так доступа progress как:

public TarefaValidaEmail(Context context){ 
    this.context = context; 
    this.cadastro=((Cadastro)context); 
} 
+0

Вы исключаете братан! hahaha спасибо! –

1

отклонить прогресс бар в методе

progress.dismiss(); 

 Смежные вопросы

  • Нет связанных вопросов^_^