Andre Viau
Andre Viau

Reputation: 275

How to change activity after an async task is completed?

The problem has been solved, thank you for the help.

Essentially, I have my onCreate() class that sets an OnClick listener on a button. Once I click it, an async task is created and executed.

This async task gets a response from a server and then sends the info to onPostExecute().

From here, if the info is valid or not, I want to toast the result and switch activities accordingly.

As of now, I have tried to do it from the onPostExecute() and it does not work. Somehow, I must get back to my main thread and do it there. How do I do this? Here is the code:

 public class Class1 extends Activity {

JSONObject jObj = null;

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.myLayout);

    Button submit = (Button) findViewById(R.id.submitButton);
    submit.setOnClickListener(new View.OnClickListener(){

        public void onClick(View arg0){

            (new CallAPI(restfulCall)).execute();
        }
    });        
}

public class CallAPI extends AsyncTask<Void,Void,String>
{
    private String restfulCall = "";

    public CallAPI(String command)
    {
        restfulCall = command;  
    }

    protected String doInBackground(Void... urls)
    {
        return API.getData(restfulCall);
    }

    protected void onPostExecute(String result) {
        try {
            jObj = new JSONObject(result);
        } catch (JSONException e1) {
            e1.printStackTrace();
        }

            try {
                if(jObj.get("status").toString().equals("success"))
                {
                    Toast.makeText(getBaseContext(),"Registration Succesful",Toast.LENGTH_LONG).show();
                    Intent intent = new Intent(Class1.this,Success.class);
                    Class1.this.startActivity(intent);

                }
                else
                {
                    Toast.makeText(getBaseContext(),jObj.get("error").toString(),Toast.LENGTH_LONG).show(); 
                    Intent intent = new Intent(Class1.this,Error.class);
                    Class1.this.startActivity(intent);          
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

    }
}

}

Upvotes: 1

Views: 1976

Answers (1)

ρяσѕρєя K
ρяσѕρєя K

Reputation: 132982

use equals for comparing Strings intead of == as :

if(jObj.get("status").toString().equals("success")

instead of

if(jObj.get("status").toString() == "success")

Upvotes: 1

Related Questions