0

I am porting my android application to BB10 Android Run Time

In some places while navigating to new activity from present activity which is in activity group,I am getting errror,

07-17 06:50:58.924: E/AndroidRuntime(25321694): java.lang.RuntimeException: Unable to pause activity {com.myactivity}: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?

It is happening in some places,Not in all places,Places in which i get the error did not call onPause() method of baseactivitygroup,places in which it works on Pause method is called

MyBase Activity code is similar to below http://ericharlow.blogspot.in/2010/09/experience-multiple-android-activities.html

package com.rak.ui;

import java.util.ArrayList;

import android.app.Activity;
import android.app.ActivityGroup;
import android.app.LocalActivityManager;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;

import com.xxx.interfaces.ConfirmActionListener;

import com.xxx.interfaces.DeleteActionListener;
import com.xxx.interfaces.TPINConfListener;

public class BActivityGroup extends ActivityGroup {
private ConfirmActionListener _confListener; 
private DeleteActionListener _delListener; 
private TPINConfListener _tpinListener;
private ArrayList<String> mIdList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    System.out.println("On Create Of BaseActivity Group>>>>>>>>>>");
    if (mIdList == null) mIdList = new ArrayList<String>();
}

public void startChildActivity(String id, Intent intent) {
    System.out.println("Within startChildActivity>>>>>>> BActivityGroup");
    Window window = getLocalActivityManager().startActivity(id,intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
    if (window!=null) {
        mIdList.add(id);
        setContentView(window.getDecorView());
    }
}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    System.out.println("On Pause Of BaseActivity Group>>>>>>>>>>");
    super.onPause();
}

@Override
protected void onDestroy() {
    // TODO Auto-generated method stub
    System.out.println("onDestroy Of BaseActivity Group>>>>>>>>>>");
    super.onDestroy();
}


@Override
public void finishFromChild(Activity child) {
    System.out.println("Within finishFromChild>>>>>>> BaseActivityGroup");
    LocalActivityManager manager = getLocalActivityManager();
    int index = mIdList.size()-1;

    if (index < 1) {
        finish();
    return;
    }
    manager.destroyActivity(mIdList.get(index), true);
    mIdList.remove(index);
    index--;
    String lastId = mIdList.get(index);
    Intent lastIntent = manager.getActivity(lastId).getIntent();
    Window newWindow = manager.startActivity(lastId, lastIntent);
    setContentView(newWindow.getDecorView());
}   
public void replaceContentView(String id, Intent newIntent) {
    View view = getLocalActivityManager().startActivity(id,
            newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
            .getDecorView();
    this.setContentView(view);
}

public void setConfirmActionListener(ConfirmActionListener listener) {
    _confListener=listener;
}

public void onConfirm() {
    if (_confListener!=null) {
        _confListener.onConfirm();
    }
}

public void setDeleteActionListener(DeleteActionListener listener) {
    _delListener=listener;
}

public void onDelete(String tag) {
    if (_delListener!=null) {
        _delListener.onDelete(tag);
    }
}

public void setTPINConfListener(TPINConfListener listener) {
    _tpinListener=listener;
}

public void onTPINConfirm(String tPIN) {
    if (_tpinListener!=null) {
        _tpinListener.onTPINEntered(tPIN);
    }
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
    //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
    return true;
    }
    return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    System.out.println("On onKeyUp Of BaseActivity Group>>>>>>>>>>");
    if (keyCode == KeyEvent.KEYCODE_BACK) {
    onBackPressed();
    return true;
    }
    return super.onKeyUp(keyCode, event);
}

public void onBackPressed () {
    System.out.println("On onBackPressed Of BaseActivity Group>>>>>>>>>>");
    int length = mIdList.size();
    if ( length > 1) {
    Activity current = getLocalActivityManager().getActivity(mIdList.get(length-1));
    current.finish();
    }
    else
    {
        finish();
    }
}

}

This issue happens in Blackberry Q5 device,no issues in BB Z10 device ,

duggu
  • 37,851
  • 12
  • 116
  • 113
Rakesh
  • 14,997
  • 13
  • 42
  • 62
  • This usually happened when you try to show a Dialog while the Activity is finished(not active) – JafarKhQ Jul 18 '13 at 10:52
  • Usually this is connected with you trying to update some view, or a dialog, while the referred activity is no longer there. A code snippet would be very useful. Are you using AsyncTask or doing asynchronous work and then updating the UI? – type-a1pha Jul 18 '13 at 14:57
  • After showing AlertDialogusing handler,I am navigating frm Base Actvity which shows popUp from it i am calling this intent,and at that time I am getting this issue – Rakesh Jul 19 '13 at 06:50
  • I am getting this issue due to activity Group,Which is calling the intent,I am getting this error in activity group only – Rakesh Jul 24 '13 at 08:17
  • I updated code,Any Idea why this issue happens? – Rakesh Jul 25 '13 at 09:08

0 Answers0