安卓活动未显示

3

我有一个应用程序,它使用官方的Facebook SDK来下载Facebook相册。最近,我更新了我的代码,以包含新的FB Android SDK 3.0。

我的第一个活动开始FB身份验证,请求朋友列表,并使用意图将所选朋友的图形ID发送到第二个活动。

我没有对启动第二个活动的代码进行任何更改,但是出现了android.view.windowleaked异常。因此,在我的第一个活动的onPause,onStop函数中调用了进度对话框的dismiss函数。然后错误消失了。

但第二个活动仍未显示在前台。也没有异常。这是我的代码。

album_intent = new Intent();
album_intent.putExtra("id",graph_id);
album_intent.putExtra("name",selected_friend.toString());
//album_intent.setComponent(new ComponentName(Barebone_fbActivity.this, album_selector.class));
album_intent.setClass(this, album_selector.class);

album_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//Context context = getApplicationContext();
//context.startActivity(album_intent);
try
{
    getApplicationContext().startActivity(album_intent);
}
catch(ActivityNotFoundException ex)
{
ex.printStackTrace();
}

我在第二个活动的onCreate方法中添加了一个toast。令人惊讶的是,toast被显示出来了,但是活动本身没有显示。我也已经检查了我的清单文件,并且没有做任何更改。我怀疑是FB Android SDK 3.0的问题,因为他们几乎从登录到图形API请求都进行了改变。请帮忙找出问题所在。
我的应用程序中的所有活动都实现了StatusCallback。这里是album_selector活动的生命周期方法。由于StatusCallback的“call”方法很长,因此未包含。另外,第二个活动扩展了ListActivity。
@Override
public void onCreate(Bundle savedInstanceState)
{
    //locks the screen in portrait mode
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Toast.makeText(this, "Voila", Toast.LENGTH_SHORT).show();
    this.setVisible(true);

    dialog = ProgressDialog.show(album_selector.this, "", getText(R.string.loading));

    //pressing back button dismisses the progress dialog
    dialog.setCancelable(true);

    //get friend_name and friend_id from the intent which started this activity
    Intent starting_intent = getIntent();
    friend_id = starting_intent.getStringExtra("id");
    friend_name = starting_intent.getStringExtra("name");

    lv = getListView();

    Session currentSession = Session.getActiveSession();
    if(currentSession == null || currentSession.getState().isClosed())
    {
        Session session = Session.openActiveSession(this, true, this);
        //Session session = Session.restoreSession(this, null, this, bundle);
        currentSession = session;
    }
    if (currentSession != null && !currentSession.isOpened())
    {
        OpenRequest openRequest = new OpenRequest(this).setCallback(this);
        if(openRequest == null)
        {
            openRequest.setDefaultAudience(SessionDefaultAudience.FRIENDS);
            openRequest.setPermissions(Arrays.asList(permissions));
            openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
            currentSession.openForRead(openRequest);
        }
    }
    dialog.dismiss();
}

public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}

protected void onStop()
{
    super.onPause();
    album_selector.this.dialog.dismiss();
}

protected void onPause()
{
    super.onPause();
    album_selector.this.dialog.dismiss();
}

你正在使用Facebook SDK 3.0.1吗? - liarspocker
也许加入一些更多的信息会更好,比如第二个活动代码的重要部分,并且请明确你所说的“没有显示”是指什么..黑屏?还是一些错误? - 5agado
@nachodeh 是的,我正在使用Facebook sdk 3.0.1。 - Vysakh Prem
我不知道要发布哪些代码。调用startactivity后,第一个活动仍然处于前台,但是之前提到的toast显示出来了。 - Vysakh Prem
@5agado 整个代码大约有700行。在Stack Exchange上发布这么大的内容是否允许?如果您能分享您的电子邮件地址,也许我可以将整个代码发送给您。 - Vysakh Prem
显示剩余8条评论
6个回答

2
我曾遇到类似的问题,即活动正在加载和运行,但无法显示。
问题在于,在AndroidManifest.XML中,该活动定义了一个名为NoDisplay的主题:
android:theme="@android:style/Theme.NoDisplay"

从活动中删除上述属性后,它又变得可见了。

0

检查一下你想要意图的子活动是否在你创建的另一个包中。如果是的话,那就是它无法识别你的活动的原因。将其重构到父活动所在的位置即可。


0

针对未来的用户:如果子布局使用了ConstraintLayout,而父布局使用了RelativeLayout / LinearLayout,那么子布局将无法呈现。 请检查是否符合您的情况。


0

我曾经遇到过同样的问题,结果是因为自动填充。请删除任何自动填充。

 android:autofillHints=""

0

.java文件和.xml文件,尝试给这些文件相同的名称。


欢迎来到SO!目前,很难理解这实际上是如何回答问题的。 - Abhishek Dutt
我也遇到了同样的问题,后来我发现具有相同名称的XML文件和Java文件的“Activity”没有这个问题。而那个出现问题的“Activity”在我改变它的名称后问题得到了解决。 - hem1t

0
我遇到了一个类似的问题,第二个活动没有显示。第二个活动中给出的提示被显示了!
这是第二个活动的一部分代码。
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".DisplayAge">

阅读完这篇文章后,我意识到这句话。

http://schemas.android.com/apk/res-auto

显示为灰色,而其他模式链接则显示为绿色。所以我从主活动XML中再次复制了这部分。

 xmlns:app="http://schemas.android.com/apk/res-auto"

在这之后,该行开始以绿色显示,并且在运行应用程序时显示了第二个活动。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接