Turkcell | Geleceği Yazanlar

Activity ile class' ların olduğu dosyadan işlemleri yapmak

Selam,

Yapıcağım uygulamada birkaç işlemi birden fazla kullanacağım için o işlemleri (fonksiyonları) bir dosyada toplayıp kullanmak istediğim yerlerde çağırmak istiyorum ancak bunları yaparken hata alıyorum.

Birincisi Toast mesajını bir fonksiyona atayıp onu istediğim yerde çağırmak.

İkincisi ise activity ler arası geçiş yapmak.

Functions.java

public class Functions{
    Context mContext;
    public void topMesaage(String message){
        try {
            Toast toast= Toast.makeText(mContext.getApplicationContext(), message, Toast.LENGTH_SHORT);
            toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL,10,20);
            toast.show();
        }catch (Exception e){
            Log.e("hata", String.valueOf("Hata var : "+e+"\n Mesaj : "+message));
        }
    }

    public void go(Class go_class) {
        startActivity(new Intent(mContext.getApplicationContext(),go_class));
    }

}

MainActivity.java

public class LoginActivity extends AppCompatActivity implements View.OnClickListener{

    TextView tv_forgot_password,tv_register;
    EditText et_name,et_pass;
    Button btn_login;
    String name,pass;

    Functions functions=new Functions();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        tv_forgot_password=(TextView)findViewById(R.id.tv_forgot_password);
        tv_forgot_password.setOnClickListener(this);

        tv_register=(TextView)findViewById(R.id.tv_register);
        tv_register.setOnClickListener(this);

        et_name=(EditText)findViewById(R.id.et_name);
        et_pass=(EditText)findViewById(R.id.et_pass);

        btn_login=(Button)findViewById(R.id.btn_login);
        btn_login.setOnClickListener(this);
    }

    @Override
    public void onBackPressed() {
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
        finish();
    }

    @Override
    public void onClick(View v) {
        int id= v.getId();
        Log.i("id", String.valueOf(id));
        switch (id){
            case R.id.tv_forgot_password:
                functions.go(ForgotPasswordActivity.class);
                break;
            case R.id.tv_register:
                functions.go(RegisterActivity.class);
                break;
            case R.id.btn_login:
                Login();
                break;
        }
    }

    public void Login() {

        name=et_name.getText().toString().trim();
        pass=et_pass.getText().toString().trim();
        if(name.length()<=0){
            functions.topMesaage("Kullanıcı Adı Alanını Boş Bırakmayınız!");
        }else if(pass.length()<=0){
            functions.topMesaage("Şifre Alanını Boş Bırakmayınız!");
        }else{

            //Buraya LOADER Eklenecek
            finish();
            functions.go(MainActivity.class);

        }

    }


}

http://prntscr.com/fsoso4 toast mesajı funksiyonunda böyle bir hata alıyorum.

    0

    Nihat

    07 Temmuz 2017

    Ekstradan facade design pattern uygulayabilirsiniz.

    0

    Emre Kaplan

    Android Developer at Nevitech - 07 Temmuz 2017

    Merhabalar,

    Context mContext; 

    burada mContext değişkeni null dır. Şu şekilde yapabilirsin.

     

    public class Functions
    {
        Context mContext;
    	
    	public Functions(Context mContext)
    	{
    		this.mContext = mContext;
    	}
    	
        public void topMesaage(String message){
            try {
                Toast toast= Toast.makeText(mContext.getApplicationContext(), message, Toast.LENGTH_SHORT);
                toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL,10,20);
                toast.show();
            }catch (Exception e){
                Log.e("hata", String.valueOf("Hata var : "+e+"\n Mesaj : "+message));
            }
        }
    
        public void go(Class go_class) {
            startActivity(new Intent(mContext.getApplicationContext(),go_class));
        }
    
    }

    MainActivity içerisinde nesne ürettğin zaman vereceğin parametre ise getActivity().getApplicationContext() dir.onCreate() fonksiyonu içerisinde..

      enteresanlikk

      Cum, 07/07/2017 - 14:13
      Selam, Çok teşekkürler emeğinize sağlık.
    Bu soruya cevap vermek için üye olmanız veya giriş yapmanız gerekmektedir.