2016-09-30 2 views
0

Я создал два вида деятельности. У Activity Main есть кнопка, и при нажатии на эту кнопку i m вызывается метод другого класса, который распространяется на 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(); 
       } 


      } 
     }); 

Что не так в этом коде, почему бы не выполнить.

+0

Попробуйте сделать то же самое, что просто удалить расширяет AppCompatActivity и OnCreate метод в ButtonActionFrontPage –

+0

Вместо того, чтобы создавать его в классе активности, создайте свой метод электронной почты в простом классе java, а затем вызовите его оттуда –

+0

1. Если я удаляю extends и oncreate, мне нужно удалить Toast. Также, как начало показа ошибки. Более того, даже после удаления, он не работает в этом случае. Удивительно, когда я создаю простой метод с оператором sop, называю это, он работал. –

ответ

0

Java классы различны по отношению к AndroidActivity. В Android-приложении есть что-то под названием life cycle.

Если какая-либо функциональность должна быть реализована, вы даже не создаете Activity. Достаточно простого Java-класса.

Активность может быть использована при взаимодействии с пользователем (infact, что не всегда верно, но чисто зависит от бизнес-логики). Для инициирования операции используется Intent. Это инициирует активность с распределением памяти и другими связанными функциями.

В вашем случае, инициация кнопки должно быть сделано в onCreate из ButtonActionFrontPage и через клик слушателя, как показано ниже

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(); 
    } 

} 
+0

внесли изменения, но все еще нет выгода. Не получать тосты, электронную почту и SOP. –

+0

Вы отлаживали? Поместите некоторый Log.v и проверьте, если шаги для отправки сообщения завершены или нет – Stallion

+0

Я обновил код. Проверьте, подходит ли ваш контроль или нет. – Stallion

0

Class будет как этот

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"); 

    } 
} 

И Calling функции, как этот

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(); 
       } 


      } 
     }); 
+0

Без расширений, код дает ошибку на Toast. Ошибка: (43, 10) ошибка: не найдено подходящего метода для makeText (ButtonActionFrontPage, String, int) метод Toast.makeText (Context, CharSequence, int) не применимо (несоответствие аргумента ButtonActionFrontPage не может быть преобразовано в контекст) метод Toast.makeText (Context, int, int) не применим (несоответствие аргумента ButtonActionFrontPage не может быть преобразовано в Context) –

+0

Это еще одна ошибка, если я изменяю функцию вызова.Ошибка: (51, 42) ошибка: метод mailconfig в классе ButtonActionFrontPage не может применяться к заданным типам; требуется: String найдено: Контекст, String Причина: фактические и формальные списки аргументов различаются по длине –

+0

Пожалуйста, вы можете разместить свой тост линии здесь –

0
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(); 
       } 
      } 
     }); 
Смежные вопросы