我通过Gradle在我的Android应用程序中集成了FB SDK,用于登录和跟踪事件.登录工作正常,但是一旦我尝试记录应用程序事件,logcat每15秒就会向我显示一个异常:
D/com.facebook.appevents.AppEventsLogger: Got unexpected exception: java.lang.ClassNotFoundException: com.facebook.a.b
Run Code Online (Sandbox Code Playgroud)
它会被PersistedEvents的readAndClearStore()方法抛出
这是我记录事件的代码:
AppEventsLogger logger = AppEventsLogger.newLogger(this);
Bundle parameters = new Bundle();
parameters.putString(AppEventsConstants.EVENT_PARAM_CURRENCY, "EUR");
parameters.putString(AppEventsConstants.EVENT_PARAM_CONTENT_TYPE, "product");
parameters.putString(AppEventsConstants.EVENT_PARAM_CONTENT_ID, id);
logger.logEvent(AppEventsConstants.EVENT_NAME_VIEWED_CONTENT,
1.99,
parameters);
Run Code Online (Sandbox Code Playgroud)
我的意思是com.facebook.a.b看起来像是一个问题.但是在FB SDK文档中,他们明确指出您不需要输入任何proguard规则来使其工作.当我不缩小我的应用程序时,如果我从github下载sdk并将其作为模块包含,此错误也会显示.
我有一个FragmentActivity,其中FragmentMediaOverview包含一个MediaItemViews 列表(每个都有一个imageview和一些文本),然后点击其中一个打开细节片段的项目.现在当我从列表到细节片段多次返回(通过后退按钮)和向前(单击listitem)时,我最终遇到了OOM-Errors.我使用SoftReferences作为listitems中的位图以及详细信息片段中的位图.根据MAT,有大量的MediaItemViews和FragmentMediaOverview实例,但我无法弄清楚为什么.
我读到了这个Android:AlertDialog导致内存泄漏,但无法解决它的null问题.
这是我的代码:
FragmentMediaOverview.java
(这不是ListFragment,因为平板电脑布局MediaAdapter需要连接到gridview)
public class FragmentMediaOverview extends Fragment {
private static String TAG = FragmentMediaOverview.class.getSimpleName();
private MediaAdapter adapter;
private OnMediaSelectedListener selListener;
private ArrayList<BOObject> mediaItems;
private ViewGroup layoutContainer;
private AdapterView itemContainer; // list or gridview
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d(TAG, "onCreateView");
layoutContainer = (ViewGroup) inflater.inflate(R.layout.fragment_media_overview, null);
return layoutContainer;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity); …Run Code Online (Sandbox Code Playgroud) 我在我的一个片段的布局中有一个FragmentTabHost(让我们称之为parentFragment).现在,我在parentFragment的onCreateView上以编程方式初始化tabhost中的每个片段.当创建parentFragment时,一切似乎都正常工作,它正确显示第一个选项卡的片段.
但是一旦我切换标签一次,片段就会消失(我可以看到tabhost的背景颜色,但没有tabcontent-container的内容).当我切换回它时,第一个片段也消失了.这些片段实际上是在我的日志记录显示时创建的,但它们不可见.
我认为它与(重新)创建片段有关,因为我也尝试使用带有FragmentPagerAdapter的ViewPager.在那里,我可以愉快地在前两个片段之间切换(由于setOffscreenPageLimit()== 1而预先加载),但是除此之外创建的片段(重新)也是空白的.
任何想法?
这是我的一些代码:
parentFragment的XML摘录:
...
<android.support.v4.app.FragmentTabHost
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_alignParentTop="true" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp" />
<FrameLayout
android:id="@+id/realtabcontent"
android:layout_below="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
</android.support.v4.app.FragmentTabHost>
...
Run Code Online (Sandbox Code Playgroud)
parentFragment的XML摘录:
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d(TAG, "onCreateView");
ViewGroup layoutContainer = (ViewGroup) inflater.inflate(R.layout.fragment_app_details_test, container, false);
tabHost = (FragmentTabHost) layoutContainer.findViewById(android.R.id.tabhost);
tabHost.setup(getActivity(), getChildFragmentManager(), R.id.realtabcontent);
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("TAB1"),
FragmentSubTab1.class, null);
tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("TAB2"),
FragmentSubTab2.class, null);
tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("TAB3"),
FragmentSubTab3.class, null);
return layoutContainer;
}
...
Run Code Online (Sandbox Code Playgroud)
子选项卡片段中的简单布局膨胀:
... …Run Code Online (Sandbox Code Playgroud) android android-tabhost android-fragments android-nested-fragment
我通过压缩并行执行多个HTTP调用。现在,其中0..n个显然可以失败。问题是,当例如2个呼叫几乎在确切的时间失败时,将处理错误1 doOnError,onErrorReturnItem但错误2会漏掉并导致异常。我认为如果错误2刚好出现而这两个onError运算符仍未完全处理错误1,就会发生这种情况。
可以使用以下简化代码来复制它:
buttonClick.flatMapSingle(action -> Single.zip(
Single.error(new Throwable("error 1")).delay(500, TimeUnit.MILLISECONDS),
Single.error(new Throwable("error 2")).delay(500, TimeUnit.MILLISECONDS),
(integer, integer2) -> true
)
.doOnError(t -> Timber.d(t.getMessage()))
.onErrorReturnItem(true))
.subscribe();
Run Code Online (Sandbox Code Playgroud)
因此,每隔一段时间就会抛出:
D/Main: error 1
W/System.err: java.lang.Throwable: error 2
Run Code Online (Sandbox Code Playgroud)
难道不应该Single.zip只允许发出一个错误吗?有一个更好的方法吗?
我似乎无法找到关于我想要编写代码的小部件的以下问题:除了Android 3.1中引入的调整大小能力之外,我希望我的小部件可以在LauncherPro或ADWLauncher等自定义启动器中调整大小.有没有办法可以定义我的小部件一旦调整大小后如何更改其布局?因此,例如,按钮A在左侧显示为2x1,但在右侧显示为3x3.此外,我希望它更改其外观/布局,因为屏幕旋转小部件大小更改(因为例如3x1在横向和纵向中具有不同的高度和宽度).
任何提示都会有所帮助.非常感谢!直到