【问题标题】:the class extends AsyncTask won't start类扩展 AsyncTask 不会启动
【发布时间】:2013-11-13 21:06:37
【问题描述】:

我是这个网站的新手,而且我是 android 编程的新手,所以你必须对我有点耐心。 我启动了一个应用程序来连接一个 mysql 数据库,但是 asynctask 不会启动,应用程序在上课前就停止了,我真的不知道为什么。那你能帮帮我吗? 这是我的代码:

public class Logar extends Activity {
EditText etUsuario, etSenha;
Button btLogin;

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

    etUsuario=(EditText) findViewById(R.id.editUsuario);
    etSenha=(EditText) findViewById(R.id.editSenha);
    btLogin=(Button) findViewById(R.id.button1);



    btLogin.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Log.i("logar", "entrou no evento");
            ArrayList<NameValuePair> parametrosPost = new ArrayList<NameValuePair>();
            parametrosPost.add(new BasicNameValuePair("usuario",etUsuario.getText().toString()));
            parametrosPost.add(new BasicNameValuePair("senha",etSenha.getText().toString()));
            Log.i("logar", "parametrosPost.add");



        }




class LoginTask extends AsyncTask<Void,Void,Void>{
    ArrayList<NameValuePair> parametrosPost = new ArrayList<NameValuePair>();
    String urlPost="http://192.168.1.131/android/logar.php";
    String urlGet="http://192.168.1.131/android/logar.php?usuario="+etUsuario.getText().toString()+"&senha="+etSenha.getText().toString();
    String respostaRetornada = null;
    @Override
    protected Void doInBackground(Void... args){
            Log.i("logar", "vai entrar no try");
            try {
                respostaRetornada = ConexaoHttpClient.executaHttpPost(urlPost, parametrosPost);
                //respostaRetornada = ConexaoHttpClient.executaHttpGet(urlGet);
                String resposta = respostaRetornada.toString();
                Log.i("logar", "resposta = "+resposta);
                resposta = resposta.replaceAll("\\s+", "");
                if (resposta.equals("1"))
                     startActivity(new Intent(Logar.this,MenuPrincipal.class));
                    //mensagemExibir("Login", "Usuario Válido PARABÉNS ");
                else
                    mensagemExibir("Login", "Usuario Inválido ????");
            }
            catch(Exception erro)
            {
                Log.i("erro", "erro = "+erro);
                Toast.makeText(Logar.this, "Erro.: "+erro, Toast.LENGTH_LONG).show();
            }
            return null;

        }


}
   public void mensagemExibir(String titulo, String texto)
   {
        AlertDialog.Builder mensagem = new AlertDialog.Builder(Logar.this);
        mensagem.setTitle(titulo);
        mensagem.setMessage(texto);
        mensagem.setNeutralButton("OK",null);
        mensagem.show();
   }
});
}
}

我会感谢所有帮助。谢谢。

【问题讨论】:

  • 您的 logcat 将拥有无价的线索。请张贴给我们大家分享赏金!
  • 您在任何时候都没有创建并执行 LoginTask 的实例
  • See this answer 关于启动和使用AsyncTask。您还需要阅读关于不更新 doInBackground() 中的 UI 的部分

标签: android mysql android-asynctask


【解决方案1】:

你必须打电话

new LoginTask().execute();

某处。

【讨论】:

    【解决方案2】:

    要启动AsyncTask,您需要调用它的execute() 方法(或者可能是executeOnExecutor),这在您显示的代码中是不可见的。

    【讨论】:

      【解决方案3】:

      您不能在 doInBackground 方法中显示 AlertDialog。

      显示警报对话框需要在 UI 线程上完成,因此您应该从 doInBackground 方法返回结果,并在 onPostExecute 方法中处理结果(并显示警报对话框)。

      【讨论】:

      • 这是很好的额外建议,但不能解决手头的问题。任务永远不会执行
      • 应用程序是否只是停止(即崩溃)或是否因为他没有执行任务而停止的问题并不清楚。无论如何,一旦他执行任务,它就会崩溃。
      • 我同意这两点。我只是说任务永远不会从给定的代码中执行。 Toast 也会让它崩溃。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多