Dennis van den Brom
Dennis van den Brom

Reputation: 107

Android create intent to start activity

I have an app, which consists of a tabhost. I am using a AsyncTask to perform some internet work in the background. Now in the onPostExecute, I want it to start a new activity. When I create a new intent, the new activity is shown, but there are no tabs.. it's just the activity.

Now i've read online how to do this, And i've managed to get into the right direction i think. This is the entire code:

package com.appsoweb.kvodeventer;

import org.json.JSONObject;

import android.app.Activity;
import android.app.ActivityGroup;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class KVOMeldingen extends ActivityGroup {

    public static final JSONObject jsonResult = null;
    Button bLogin, bCreateAccount, bResetPassword;
    EditText etUsername, etPassword;
    static String Username;
    static String Password;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.meldingen);
        final EditText etUsername = (EditText) findViewById(R.id.etUsername);
        final EditText etPassword = (EditText) findViewById(R.id.etPassword);
        Button bLogin = (Button) findViewById(R.id.bLogin);
        Button bCreateAccount = (Button) findViewById(R.id.bCreateAccount);
        Button bResetPassword = (Button) findViewById(R.id.bResetPassword);

        bLogin.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (etUsername.length() <= 0) {
                    etUsername.setError("Veld mag niet leeg zijn");
                } else if (etPassword.length() <= 0) {
                    etPassword.setError("Veld mag niet leeg zijn");
                } else {
                    Username = etUsername.getText().toString();
                    Password = etPassword.getText().toString();
                }
                LoginTask NDLT = new LoginTask();
                NDLT.execute();
            }
        });

        bCreateAccount.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // Doe iets hier.......

            }

        });

        bResetPassword.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // Doe iets hier........

            }

        });

    }

    public static String getUsername() {
        return Username;
    }

    public static String getPassword() {
        return Password;
    }

    class LoginTask extends AsyncTask<Void, Void, JSONObject> {

        ProgressDialog waitingDialog;

        @Override
        protected void onPreExecute() {
            waitingDialog = new ProgressDialog(KVOMeldingen.this);
            waitingDialog.setMessage("Laden...");
            waitingDialog.show();
            super.onPreExecute();
        }

        @Override
        protected JSONObject doInBackground(Void... params) {

            JSONObject json = JsonFunctionLogin
                    .getJsonLoginResult("http://api.crossalertdeventer.nl/login.json");
            return json;

        }

        @Override
        protected void onPostExecute(JSONObject json) {
            super.onPostExecute(json);
            if (waitingDialog.isShowing()) {
                waitingDialog.dismiss();
                Log.d("iets gebeurt", "gedaan");
            }
            try {

                String LoginResult = json.getString("login");
                String UserIdResult = json.getString("user_id");
                Log.d("LoginResult", LoginResult);
                Log.d("LoginUserId", UserIdResult);
                json = null;
                Intent intent = new Intent(KVOMeldingen.this, KVOCards.class);

                View view = getLocalActivityManager().startActivity("KVOCards", intent
                                                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                                                .getDecorView();

                replaceView(view);


            } catch (Exception e) {
                Log.e("KVOMeldingen", "error" + e.getMessage());
            }

        }

        public void replaceView(View v){
            setContentView(v);
        }
    }

}

As you can see: I've created a View that will be shown trough an Intent. But the intent doesn't launch after the onbackground. It gives me an error:

Unable to start Activity componentInfo Unable to add window ... Token..... is not valid... Is your application running?

What am i doing wrong?

Thnx in advance

Upvotes: 0

Views: 722

Answers (1)

Andro Selva
Andro Selva

Reputation: 54322

Starting a new Activity means you are navigating from your TabActivity to a normal Activity. Obviously you can't find a tab in Activity. You have to replace views instead of creating Activities.

Here is a good example of how to use ActivityGroup with TabActivity.

http://web.archive.org/web/20100816175634/http://blog.henriklarsentoft.com/2010/07/android-tabactivity-nested-activities/

But still this approach has been deprecated. You might have to consider using fragments though.

Take a look here, http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabs.html

Upvotes: 1

Related Questions