簡體   English   中英

單擊按鈕時未從mainactivity中調用方法

[英]Method not being called from mainactivity on button click

我創建了兩個活動。 Activity Main有一個按鈕,然后單擊此按鈕,即調用擴展到AppCompActivity的另一個類的方法。 方法名稱為mailconfig,如下所示。 機密信息已從參數中刪除。

public class ButtonActionFrontPage extends AppCompatActivity{


  protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
    }

    public void mailconfig(String message) throws EmailException {

        String username = "";
        String password = "";
        String from = "";
        String replyto = "";

        String mailto = "";
        String subject = "";

        Email email = new SimpleEmail();
        email.setSSLOnConnect(true);
        email.isStartTLSEnabled();
        email.setHostName("");
        email.setSmtpPort(26);
        email.setSubject(subject);
        email.addReplyTo(replyto);
        email.setFrom(from);
        email.setAuthenticator(new DefaultAuthenticator(username, password));
        email.setMsg(message);
        email.addTo(mailto);
        email.send();

       Toast.makeText(ButtonActionFrontPage.this,"Thanks for submitting ",Toast.LENGTH_SHORT).show();
        System.out.println("Sent");

    }
}

我使用下面的代碼來調用上面的方法。

feedbackbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    ButtonActionFrontPage buttonActionFrontPage = new ButtonActionFrontPage();
                  String  message = quickfbet.getText().toString();
                    buttonActionFrontPage.mailconfig(message);
                } catch (EmailException e) {
                    e.printStackTrace();
                }


            }
        });

這段代碼有什么問題,為什么不執行。

上課就是這樣

public class ButtonActionFrontPage {


    public void mailconfig(Context context,String message) throws EmailException {

        String username = "";
        String password = "";
        String from = "";
        String replyto = "";

        String mailto = "";
        String subject = "";

        Email email = new SimpleEmail();
        email.setSSLOnConnect(true);
        email.isStartTLSEnabled();
        email.setHostName("");
        email.setSmtpPort(26);
        email.setSubject(subject);
        email.addReplyTo(replyto);
        email.setFrom(from);
        email.setAuthenticator(new DefaultAuthenticator(username, password));
        email.setMsg(message);
        email.addTo(mailto);
        email.send();

       Toast.makeText(context,"Thanks for submitting ",Toast.LENGTH_SHORT).show();
        System.out.println("Sent");

    }
}

和這樣的調用功能

feedbackbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    ButtonActionFrontPage buttonActionFrontPage = new ButtonActionFrontPage();
                  String  message = quickfbet.getText().toString();
                    buttonActionFrontPage.mailconfig(getApplicationContext(),message);
                } catch (EmailException e) {
                    e.printStackTrace();
                }


            }
        });
public class ButtonActionFrontPage extends AppCompatActivity{

static ButtonActionFrontPage instance;


  protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        instance = this;
    }

  public static ButtonActionFrontPage getInstance() {
        return instance;
    }

@Override
    protected void onDestroy() {
        super.onDestroy();
        instance = null;
    }
}

並調用該函數:

feedbackbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    ButtonActionFrontPage buttonActionFrontPage =  ButtonActionFrontPage.getInstance();                     String  message = quickfbet.getText().toString();
                    buttonActionFrontPage.mailconfig(message);
                } catch (EmailException e) {
                    e.printStackTrace();
                }
            }
        });

Java類在Android Activity方面有所不同。 由於Android Activity具有所謂的生命周期

如果必須實現某些功能,您甚至無需創建活動。 只需一個普通的Java類就足夠了。

當存在用戶交互時,可以使用活動(事實並非總是如此,而是完全取決於業務邏輯)。 為了啟動活動,使用了Intent 這將通過內存分配和其他相關功能啟動活動。

對於您的情況,按鈕的初始化應在ButtonActionFrontPage的onCreate中並通過單擊偵聽器進行,如下所示

Button feedbackbtn;
protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        feedbackbtn=(Button)findViewById(R.id.button_ID);
        feedbackbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                 new PlainJavaClass().mailconfig("msg",ButtonActionFrontPage.class);
                }
        });
    }

對於業務邏輯,如果必須顯示任何Toast / Dialog / ProgressBar只需將PlainJavaClass與方法和context一起使用

class PlainJavaClass{

      public void mailconfig(String message, Context context)  {

        Log.v("TAG","mailconfig with message="+message);
        //Your logic
        Toast.makeText(context,"Thanks for submitting ",Toast.LENGTH_SHORT).show();
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM