方法没有从按钮点击mainactivity调用
我已经创建了两个活动。活动主要有按钮,并点击这个按钮我调用其他类扩展到AppCompActivity的方法。方法名称是mailconfig,如下所示。机密信息已从参数中删除。方法没有从按钮点击mainactivity调用
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();
}
}
});
这段代码有什么问题,为什么不执行。
Java类有所不同相对于Android
Activity
。由于Android Activity有一些名为life cycle的内容。
如果必须实现某些功能,则甚至不创建活动。只需一个普通的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);
}
});
}
业务逻辑只需使用PlainJavaClass与方法和context
,如果你要表现出任何Toast
/Dialog
/ProgressBar
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();
}
}
类会像这样
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();
}
}
});
没有扩展,代码在Toast上发生错误。错误:(43,10)错误:找不到合适的makeText方法(ButtonActionFrontPage,String,int) 方法Toast.makeText(Context,CharSequence,int)不适用 (参数不匹配; ButtonActionFrontPage不能转换为上下文) 方法Toast.makeText(Context,int,int)不适用 (参数不匹配; ButtonActionFrontPage不能转换为Context) –
这是另一个错误,如果我更改了调用函数。错误:(51,42)错误:类ButtonActionFrontPage中的方法mailconfig不能应用于给定的类型; 要求:字符串 发现:语境,字符串 原因:实际的和正式的参数列表长度 –
不同,你可以请把你的面包线在这里 –
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;
}
}
这
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 = ButtonActionFrontPage.getInstance(); String message = quickfbet.getText().toString();
buttonActionFrontPage.mailconfig(message);
} catch (EmailException e) {
e.printStackTrace();
}
}
});
尝试做同样的事情,只是删除扩展AppCompatActivity和onCreate方法在ButtonActionFrontPage –
而不是在活动类中创建它,在简单的java类中创建您的电子邮件方法,然后从那里调用它 –
1.如果我删除了延伸和oncreate,我必须删除Toast另外,作为开始显示错误。而且,即使删除后,在这种情况下也不起作用。令人惊讶的是,当我用sop语句创建一个简单的方法时,称之为它的工作。 –