Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ActivityGroup-NullPointerException_Android_Android Activity_Nullpointerexception_Activitygroup - Fatal编程技术网

Android ActivityGroup-NullPointerException

Android ActivityGroup-NullPointerException,android,android-activity,nullpointerexception,activitygroup,Android,Android Activity,Nullpointerexception,Activitygroup,我正在尝试使用活动组-因为我使用选项卡,并且希望在单击列表项后加载和活动时使用这些选项卡,。但我在下面一行中得到了nullpointerexception: View view1 = S1_Group.group.getLocalActivityManager() .startActivity("S1", intent) .getDecorView(); 代码是 lv.setOnItem

我正在尝试使用活动组-因为我使用选项卡,并且希望在单击列表项后加载和活动时使用这些选项卡,。但我在下面一行中得到了nullpointerexception:

View view1 = S1_Group.group.getLocalActivityManager()
                           .startActivity("S1", intent)
                           .getDecorView();
代码是

lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
          int position, long id) {


        Intent intent = new Intent(getApplicationContext(), S1.class);

        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        Log.d("test","Before view");
        try{
            View view1 = S1_Group.group.getLocalActivityManager()
               .startActivity("S1", intent)
               .getDecorView();
               Settings_Group.group.setContentView(view1);      
        }
        catch (Exception e){
            Log.e("test","view failded:"+e);
        }
....
lv.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
Intent Intent=新的Intent(getApplicationContext(),S1.class);
intent.addFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP);
日志d(“测试”、“查看前”);
试一试{
查看视图1=S1_Group.Group.getLocalActivityManager()
.起始触觉(“S1”,意图)
.getDecorView();
设置\u Group.Group.setContentView(视图1);
}
捕获(例外e){
Log.e(“测试”,“视图失败:+e”);
}
....
更新:我的小组活动是这样的:我找不到问题所在

public class S1_Group extends ActivityGroup {

    public static S1_Group group;
    private ArrayList<View> history;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        this.history = new ArrayList<View>();
        group = this;

        View view = getLocalActivityManager().startActivity("F1", 
                new Intent(this, F1.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();

        setContentView(view);
    }
}
公共类S1\u组扩展了ActivityGroup{
公共静态S1_组;
私家侦探史;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
this.history=new ArrayList();
组=此;
View=getLocalActivityManager().startActivity(“F1”,
新建Intent(this,F1.class).addFlags(Intent.FLAG\u ACTIVITY\u CLEAR\u TOP)).getDecorView();
setContentView(视图);
}
}

不确定如何实现ActivityGroup,但该组需要是一个静态变量

我在google上找到了这个教程,它描述了如何实现ActivityGroup。

希望这有帮助,
托拜厄斯

我也遇到了同样的问题。为了解决这个问题,我将多重呼叫线路分解为三条线路,正如第一个答案所示:

            LocalActivityManager processManager =activityGroup.group.getLocalActivityManager();
            Window w = processManager.startActivity("ActivityOne", myIntent);
            View view = w.getDecorView();
然后发现第一行是问题所在。因为我正在从活动组之外的活动(它是另一个选项卡下的活动)调用ActivityOne,所以静态的“activityGroup.group…”尚未初始化。因此,相当麻烦的修复方法是在启动intent之前切换到该选项卡并返回到此选项卡。因此,在上面的代码之前添加以下内容:

            AppName.switchToTab(2);  
            AppName.switchToTab(1); 

这就解决了问题,你看不到选项卡切换。一个更整洁的解决方案可能是在启动时切换到所有选项卡,以确保它们都已初始化…

遇到了相同的问题,并且似乎在你尝试(重新启动)时,LocalActivityManager存在(或曾经存在)一个错误启动一个ID与以前销毁的活动相同的活动。由于destroyActivity方法内部存在错误,它将作为窗口简单地返回null。我使用的解决方案使用反射正确销毁活动(解决方案后的详细说明):


虽然他们说Froyo正在修复它,但我仍然在运行2.3.3的三星galaxy S2上遇到了它。基本调试步骤:如果你在一行上得到一个NPE,它有几个链。“调用,例如,
a().b().c().d()
,那么这些方法中很可能有一个返回null。将这行拆分为单独的调用,例如
X=a”();yy=x.b();zz=Y.c();ww=Z.d()
,并添加检查以查看哪个返回null。
public boolean destroyActivityWorkAround(String id) {
    final LocalActivityManager activityManager = getLocalActivityManager();
    if(activityManager != null){
        activityManager.destroyActivity(id, false);             
        try {
            // Use reflection to get to the HashMaps with the records(which activities are started ect.)
            // to remove the records properly 
            // http://code.google.com/p/android/issues/detail?id=10083
            final Field mActivitiesField = LocalActivityManager.class.getDeclaredField("mActivities");
            if(mActivitiesField != null){
                mActivitiesField.setAccessible(true);
                @SuppressWarnings("unchecked")
                final Map<String, Object> mActivities = (Map<String, Object>)mActivitiesField.get(activityManager);
                if(mActivities != null){
                    mActivities.remove(id);
                }
                final Field mActivityArrayField = LocalActivityManager.class.getDeclaredField("mActivityArray");
                if(mActivityArrayField != null){
                    mActivityArrayField.setAccessible(true);
                    @SuppressWarnings("unchecked")
                    final ArrayList<Object> mActivityArray = (ArrayList<Object>)mActivityArrayField.get(activityManager);
                    if(mActivityArray != null){
                        for(Object record : mActivityArray){
                            final Field idField = record.getClass().getDeclaredField("id");
                            if(idField != null){
                                idField.setAccessible(true);
                                final String _id = (String)idField.get(record);
                                if(id.equals(_id)){
                                    mActivityArray.remove(record);
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
            Log.e(LOGTAG, this.getClass().getSimpleName() + ".destroyActivityWorkAround() removing activity using reflection failed with error:", e);
            //e.printStackTrace();
        }
        return true;
    }
    return false;
}
     public Window destroyActivity(String id, boolean finish) {
         LocalActivityRecord r = mActivities.get(id);   //<-- id's are the key's for the HashMap
         Window win = null;
         if (r != null) {
             win = performDestroy(r, finish);
             if (finish) {
                    mActivities.remove(r);  //--> This works on id's not the 'r object', this doesn't remove anything
             }
         }
         return win;
     } 
if (finish) {
    mActivities.remove(id);    //--> mActivities should remove the id
    mActivityArray.remove(r);  //--> mActivitiesArray should remove the 'r object' (LocalActivityRecord)
}