【问题标题】:In Android AsyncTask not fetching the doInBackground error message在 Android AsyncTask 中未获取 doInBackground 错误消息
【发布时间】:2015-05-05 11:49:51
【问题描述】:

我的要求:-

在我的 Android 项目中,我使用 javamail 连接到 gmail .. 所以,我想当我单击按钮时,将启动一个进度对话框,并在后台尝试连接到 gmail ..如果用户名和密码正确,则表示它连接到 gmail ..然后将转到下一个activity..否则它将关闭进度对话框并显示 toast --“出现问题”

所以我有这个:--

 button1.setOnClickListener(new OnClickListener() {

                    @Override
            public void onClick(View v) {


                     props = new Properties();
                    props.put("mail.smtp.host", "smtp.gmail.com");
                    props.put("mail.smtp.socketFactory.port", "465");
                    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
                    props.put("mail.smtp.auth", "true");
                    props.put("mail.smtp.port", "465");
                    pdialog = ProgressDialog.show(context, "", "Please wait...", true);

                                    session = Session.getDefaultInstance(props, new Authenticator() {
                        protected PasswordAuthentication getPasswordAuthentication() {
                            return new PasswordAuthentication(username,password);
                        }
                    });
                    RetreiveFeedTask task = new RetreiveFeedTask();
                    task.execute();
            }
        });
    }

    class RetreiveFeedTask extends AsyncTask<String, Void, String> {



        @Override
        protected String doInBackground(String... params) {


            try{


                 Transport transport = session.getTransport("smtp");
                    // Enter your correct gmail UserID and Password
                    transport.connect("smtp.gmail.com", username, password);

            } catch(Exception e) {
                //e.printStackTrace();

                Toast.makeText(context, "something is wrong",  Toast.LENGTH_SHORT).show();
            }
            return null;
        }
          @Override
            protected void onProgressUpdate(Void... result) {                        
              pdialog.show();                         
            }
        @Override
        protected void onPostExecute(String result) {

            pdialog.dismiss();

            iget = new Intent(context,NextScreen.class);
            startActivity(iget);


        }
    }

但是问题是:--如果它连接到 gmail id 然后它会进入下一个屏幕...如果我输入错误的用户名/密码然后它会崩溃..问题出在哪里在我的代码中??

【问题讨论】:

  • 你试过解决方案了吗?

标签: android android-asynctask


【解决方案1】:

doInBackground() 中的Toast 是问题

你不能发任何UI operations in doInBackground()

将一些标志(如everythingOk=true/false)返回给onPostExecute() & 根据标志显示Toast

class RetreiveFeedTask extends AsyncTask<String, Void, Boolean> {

   boolean everythingOk=false;


    @Override
    protected Boolean doInBackground(String... params) {

        try{
             everythingOk=true;
             Transport transport = session.getTransport("smtp");
             transport.connect("smtp.gmail.com", username, password);

        } catch(Exception e) {

          everythingOk=false;
        }
        return everythingOk;
    }

    @Override
    protected void onProgressUpdate(Void... result) {                        
          pdialog.show();                         
     }

    @Override
    protected void onPostExecute(Boolean result) {    

      pdialog.dismiss();       
      if(result==true){
      iget = new Intent(context,NextScreen.class);
                startActivity(iget);       
      }
      else{
         Toast.makeText(context, "something is worng",  Toast.LENGTH_SHORT).show();
      }          
   }
}

【讨论】:

  • 我用过那个代码..但每次它显示“有东西磨损了”
【解决方案2】:

试试这个:

runOnUiThread(new Runnable()
  {
     Toast.makeText(context, "something is worng",Toast.LENGTH_SHORT).show();
  })

类似问题:Can i have an example of displaying a toast using runOnUiThread.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    相关资源
    最近更新 更多