Perform Toast from a new Java class on Android

2

I have a main Activity called LoginActivity , which when clicking on a Button connects to a database. I wanted to make the connection in a new class called MiTurno .

My problem is that it gives me an error when doing a Toast (this to show errors like INCORRECT PASSWORD , etc) from this new class and I do not know how to correct it.

This is the LoginActivity.java code (see comments):

package com.windroid.dinas;

.....

public class LoginActivity extends AppCompatActivity {

    GlobalVariables globalVariables;

    EditText miUser;
    EditText miPass;

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

        globalVariables = (GlobalVariables)getApplicationContext();

        miUser = (EditText) findViewById(R.id.eUser);
        miPass = (EditText) findViewById(R.id.ePass);
    }

    public void Login(View view) {
        new MiTurno().execute("http://10.0.3.2/baradm/sesion.php?id="+miUser.getText().toString());
    }

and this is the MyTurn class that is done in a new class called MyTurning.java:

package com.windroid.dinas;

......

    public class MiTurno extends AsyncTask<String, Void, String> {

    GlobalVariables globalVariables;

    public GlobalVariables getGlobalVariables() {
        return globalVariables;
    }

    @Override
        protected String doInBackground(String... urls) {
            // params comes from the execute() call: params[0] is the url.
            try {
                return downloadUrl(urls[0]);
            } catch (IOException e) {
                return "Unable to retrieve web page. URL may be invalid.";
            }
        }

        // onPostExecute displays the results of the AsyncTask.
        @Override
        protected void onPostExecute(String result) {

            try {
                JSONArray ja = new JSONArray(result);

               if (!ja.getString(1).equals(miUser.getText().toString())) {

//----> AQUI SE GENERA EL ERROR Y NO SE COMO SOLUCIONARLO

                    Toast toast = Toast.makeText(LoginActivity.this, "USUARIO NO EXISTE", Toast.LENGTH_LONG);
                    toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
                    toast.show();
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    
asked by user2683734 19.02.2017 в 22:08
source

2 answers

0

Add a constructor that receives the context, so that it can be used within the class Asynctask :

public class MiTurno extends AsyncTask<String, Void, String> {

    private Context mContext;

    public MiTurno(Context context){
         mContext = context;
    }
    ...
    ...

When you call the Asynctask initializes with the context:

MiTurno miturno = new MiTurno(this);
miturno.execute("http://10.0.3.2/baradm/sesion.php?id="+miUser.getText().toString());

or simply:

new MiTurno(this).execute("http://10.0.3.2/baradm/sesion.php?id="+miUser.getText().toString());

this is what is usually done to get the context in the class that can not access the context by this , getActivity() or getApplicationContext() , etc ...

    
answered by 19.02.2017 / 22:25
source
0

You can add a variable which is an Activity and then call Toast by passing on that activity

MiTurno Class

    public class MiTurno extends AsyncTask<String, Void, String> {

GlobalVariables globalVariables;
Activity actividad;

public MiTurno(Activity actividad)
{
    this.actividad = actividad;
}

public GlobalVariables getGlobalVariables() {
    return globalVariables;
}

@Override
    protected String doInBackground(String... urls) {
        // params comes from the execute() call: params[0] is the url.
        try {
            return downloadUrl(urls[0]);
        } catch (IOException e) {
            return "Unable to retrieve web page. URL may be invalid.";
        }
    }

    // onPostExecute displays the results of the AsyncTask.
    @Override
    protected void onPostExecute(String result) {

        try {
            JSONArray ja = new JSONArray(result);

           if (!ja.getString(1).equals(miUser.getText().toString())) {
    ----> AQUI SE GENERA EL ERROR Y NO SE COMO SOLUCIONARLO
                Toast toast = Toast.makeText(actividad, "USUARIO NO EXISTE", Toast.LENGTH_LONG);
                toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
                toast.show();
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

LoginActivity class

    public class LoginActivity extends AppCompatActivity {

GlobalVariables globalVariables;

EditText miUser;
EditText miPass;

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

    globalVariables = (GlobalVariables)getApplicationContext();

    miUser = (EditText) findViewById(R.id.eUser);
    miPass = (EditText) findViewById(R.id.ePass);
}

public void Login(View view) {
    new MiTurno(this).execute("http://10.0.3.2/baradm/sesion.php?id="+miUser.getText().toString());
}
    
answered by 19.02.2017 в 22:15