【问题标题】:onPostExecute runs before doInBackground method is finishedonPostExecute 在 doInBackground 方法完成之前运行
【发布时间】:2020-09-28 00:53:48
【问题描述】:

所以,我只是制作了一个登录屏幕,其中数据来自外部服务器。 所有这些都发生在后台方法中。除了 onPost 和 onPre 方法之外,它都可以正常工作。 我不认为他们在做他们的工作。

在 onBackground 方法运行时,我想:

1.如果数据正确或错误,显示消息。

2.显示我在 doinbackground 运行时创建的自定义进度对话框。

但它们都不起作用,有什么想法吗?

这是我的代码!

 public class DoLogin extends AsyncTask<String,String,String>
    {
        String message = "";
        Boolean isSuccess = false;

        String userid = dename.getText().toString();
        String password = pass.getText().toString();



        @Override
        protected void onPreExecute() {
           progressDialog.showProgress(SignInAr.this,"Loading...",false);
        }



        @Override
        protected String doInBackground(String... params) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    if(userid.trim().equals("")|| password.trim().equals(""))
                        message = "Please enter Username and Password";
                    else
                    {
                        try {
                            Connection con = connectionClass.CONN();
                            if (con == null) {
                                message = "Error in connection with SQL server please contact the administrator";
                                isSuccess = false;
                            } else {
                                String query = "SELECT * FROM CustomerData where CustomerMobile='" + userid + "' and CustomerPassword='" + password + "'";
                                Statement stmt = con.createStatement();
                                ResultSet rs = stmt.executeQuery(query);




                                if(rs.next())
                                {
                                    String id = rs.getString("CustomerID");
                                    String mob = rs.getString("CustomerMobile");
                                    String lng = getIntent().getStringExtra("lng");
                                    String lat = getIntent().getStringExtra("lat");
                                    message = "Welcome " + userid;
                                    Intent intent = new Intent(SignInAr.this,agzakhana_mainAr.class);
                                    intent.putExtra("lat",lat);
                                    intent.putExtra("lng",lng);
                                    intent.putExtra("nameid",id);
                                    String getname = rs.getString("CustomerName");
                                    intent.putExtra("nameofcus",getname);
                                    intent.putExtra("mob",mob);
                                    startActivity(intent);
                                    finish();
                                    isSuccess=true;



                                }
                                else
                                {
                                    message = "Wrong info";
                                    isSuccess = false;
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            isSuccess = false;
                            message = "Exceptions"+ex;
                        }
                    }
                }
            }).start();

            return message;
        }



        @Override
        protected void onPostExecute(String r) {

           progressDialog.hideProgress();
            System.out.println("Message is: "+ r + "and isSuccess = "+ isSuccess);

            if(!isSuccess) {
                Toast.makeText(SignInAr.this,r,Toast.LENGTH_LONG).show();
            }

        }
    }

这是我调用异步任务的方式:

 submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                DoLogin doLogin = new DoLogin();
                doLogin.execute();

            }
        });

【问题讨论】:

  • 展示你如何调用你的异步任务。
  • @blackapps 刚刚编辑了问题!

标签: java android android-asynctask


【解决方案1】:

在线程运行之前返回值。修复它很简单,您应该在方法doInBackground 中删除ThreadRunnable,因为在AsyncTask 中它已经使doInBackgroundBackground Thread 中运行。

【讨论】:

  • 除了谢谢你,我不知道该说什么。效果很好!
猜你喜欢
  • 2016-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多