Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Re: Classe Singleton chamando ProgressDialog

Vc colocou um Log de debug e ele não passa no método?

Ou ele passa e não mostra sua dialog?

[]s
Neto
---
Neto Marin

Blog: http://blog.netomarin.com
GTalk: netomarin@gmail.com
MSN: neto_marin@hotmail.com
Skype: netomarin


On Mon, Apr 2, 2012 at 12:28 PM, Juliano Oliveira <jul.oliveira@gmail.com> wrote:
Galera, não sei o que acontece mas meu AsyncTask não funciona da forma certa.

Eu aind atenho uma classe WebApi que faz o trabalho de chamar os recursos da API por HTTP.

Agora, eu criei uma classe que extende AsyncTask e no onPreExecute eu chamo o ProgressDiealog.

Para testar, coloquei um SLEEP no recurso que está sendo chamado para ver se a ProgressDialog abre e fica na tela até a Task executar o onPostExecute

O que ocorre é que o ProgressDialog não abre na hora, a UI fica travada e quando o servidor responde, o ProgressDialog abre rapidamente e some, ou seja... o onPre, o doInBackground e o onPost estão sendo executado tudo ao mesmo tempo...

Tentei enfiar um Thread.sleep(5000) no doInBackground para ver como se comporta, e acontece a mesma coisa...

Alguém pode me ajudar?


os códigos:

public class MobileActivity extends Activity {
    
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button loginButton = (Button) findViewById(R.id.btnLogin);
        loginButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
try {
onLoginClick();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}

protected void onLoginClick() throws InterruptedException, ExecutionException {
EditText user = (EditText) findViewById(R.id.txtUser);
EditText pass = (EditText) findViewById(R.id.txtPass);
AsyncTask<Object, Void, Object> a = new MyTasks().execute(ApiEnum.AUTENTICAR, user.getText().toString(), pass.getText().toString());
UsuarioAutorizado usuario = (UsuarioAutorizado) a.get();
Toast.makeText(getApplicationContext(), "Usuário: " + (usuario == null ? " nulo" : " nao é nulo"), 10000).show();
}

class Tasks extends AsyncTask<Object, Void, Object> {
Object resultadoApi = null;
@Override
protected void onPreExecute() {
super.onPreExecute();
                showDialog(0);
             }
@Override
   protected void onPostExecute(Object result) {
dismissDialog(0);
result = resultadoApi;
}
@Override
protected Object doInBackground(Object... params) {
if (params.length == 0)
throw new Error();
ApiEnum recurso = (ApiEnum) params[0];
switch (recurso) {
case AUTENTICAR:
WebApi _api = WebApi.getInstance();
resultadoApi = _api.autenticar(params[1].toString(), params[2].toString());
break;
}
return resultadoApi;
}
}
    
}






Em sexta-feira, 30 de março de 2012 11h11min47s UTC-3, Juliano Oliveira escreveu:
Bom dia galera,

Estou iniciando no desenvolvimento de aplicações Android e estou ainda me adaptando ao paradigma de desenvolvimento nesse ambiente e o choque tem sido grande.

Seguindo minhas bases de conhecimento em arquitetura, estou desenvolvendo da seguinte forma:

Eu tenho uma WEB API (semelhante ao twitter) em que o android acessa alguns recursos que são retornados em json.
Criei uma classe especifica que abstrai toda complexidade de acessar uma WEB API.
Essa classe é singleton para toda a aplicação.

Como essa classe é singleton, a forma que eu achei na internet de instanciar um singleton é iniciar meus singletons com um,a outra classe que extende uma Application
Essa classe que extende Application é usada nas minhas Activities.

Como todas as minhas telas usarão pelo menos um recurso da minha WEB API, criei uma classe que extende Activity que já inicia os objetos.

Então fica assim mais ou menos:

public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
initSingletons();
}
protected void initSingletons() {
WebApi.initInstance();
}
}


// Anctivity
public abstract class MyActivityBase extends Activity {
protected WebApi _api;
protected MyApplication _application;
static final int PROGRESS_DIALOG = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        _application= (MyApplication) getApplication();
        _api = WebApi.getInstance();      
    }

}

public class WebApi {
private static WebApi instance;

public static void initInstance() {
if (instance == null) {
instance = new TradeforceApi();
}
}

public static WebApi getInstance() {
return instance;
}

private WebApi() {
client = new DefaultHttpClient();
gson = new Gson();
}

        public String AcessarRecursoDaWEBAPI() {
              // Faz o que tem que fazer...
        }
}

A DÚVIDA

Essa minha classe WebApi vai ficar acessando recursos da Web, ou seja, I/O... então, enquanto ela acessa esses recursos eu queria exibir uma ProgressDialog.
Tentei implementar com Custom Events mas não funcionou.
Tentei fazer a WebApi extendendo AsyncTask mas não consegui.

Enfim, alguém pode me ajudar como fazer a WebApi toda vez que acessar um recurso, disparar para a UI um aviso que precisa ser exibida uma ProgressDialog?

Valeu galera

[]´s

Em sexta-feira, 30 de março de 2012 11h11min47s UTC-3, Juliano Oliveira escreveu:
Bom dia galera,

Estou iniciando no desenvolvimento de aplicações Android e estou ainda me adaptando ao paradigma de desenvolvimento nesse ambiente e o choque tem sido grande.

Seguindo minhas bases de conhecimento em arquitetura, estou desenvolvendo da seguinte forma:

Eu tenho uma WEB API (semelhante ao twitter) em que o android acessa alguns recursos que são retornados em json.
Criei uma classe especifica que abstrai toda complexidade de acessar uma WEB API.
Essa classe é singleton para toda a aplicação.

Como essa classe é singleton, a forma que eu achei na internet de instanciar um singleton é iniciar meus singletons com um,a outra classe que extende uma Application
Essa classe que extende Application é usada nas minhas Activities.

Como todas as minhas telas usarão pelo menos um recurso da minha WEB API, criei uma classe que extende Activity que já inicia os objetos.

Então fica assim mais ou menos:

public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
initSingletons();
}
protected void initSingletons() {
WebApi.initInstance();
}
}


// Anctivity
public abstract class MyActivityBase extends Activity {
protected WebApi _api;
protected MyApplication _application;
static final int PROGRESS_DIALOG = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        _application= (MyApplication) getApplication();
        _api = WebApi.getInstance();      
    }

}

public class WebApi {
private static WebApi instance;

public static void initInstance() {
if (instance == null) {
instance = new TradeforceApi();
}
}

public static WebApi getInstance() {
return instance;
}

private WebApi() {
client = new DefaultHttpClient();
gson = new Gson();
}

        public String AcessarRecursoDaWEBAPI() {
              // Faz o que tem que fazer...
        }
}

A DÚVIDA

Essa minha classe WebApi vai ficar acessando recursos da Web, ou seja, I/O... então, enquanto ela acessa esses recursos eu queria exibir uma ProgressDialog.
Tentei implementar com Custom Events mas não funcionou.
Tentei fazer a WebApi extendendo AsyncTask mas não consegui.

Enfim, alguém pode me ajudar como fazer a WebApi toda vez que acessar um recurso, disparar para a UI um aviso que precisa ser exibida uma ProgressDialog?

Valeu galera

[]´s

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário