我一直在使用4.27.0facebook sdk for android的版本.我一直在为Android 8+设备崩溃.堆栈跟踪如下:
Fatal Exception: java.lang.AssertionError: No NameTypeIndex match for SHORT_DAYLIGHT
at android.icu.impl.TimeZoneNamesImpl$ZNames.getNameTypeIndex(TimeZoneNamesImpl.java:724)
at android.icu.impl.TimeZoneNamesImpl$ZNames.getName(TimeZoneNamesImpl.java:790)
at android.icu.impl.TimeZoneNamesImpl.getTimeZoneDisplayName(TimeZoneNamesImpl.java:183)
at android.icu.text.TimeZoneNames.getDisplayName(TimeZoneNames.java:261)
at java.util.TimeZone.getDisplayName(TimeZone.java:405)
at java.util.TimeZone.getDisplayName(TimeZone.java:370)
at com.facebook.internal.Utility.refreshTimezone(Utility.java:1066)
at com.facebook.internal.Utility.refreshPeriodicExtendedDeviceInfo(Utility.java:1056)
at com.facebook.internal.Utility.setAppEventExtendedDeviceInfoParameters(Utility.java:707)
at com.facebook.internal.AppEventsLoggerUtility.getJSONObjectForGraphAPICall(AppEventsLoggerUtility.java:68)
at com.facebook.FacebookSdk.publishInstallAndWaitForResponse(FacebookSdk.java:568)
at com.facebook.FacebookSdk$4.run(FacebookSdk.java:547)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
Run Code Online (Sandbox Code Playgroud)
我通过网络搜索过这个但是无法获得任何有用的信息.请在此提供一些指示.
为了正确理解Java中的并发问题和解决方案,我正在阅读官方Java教程.在其中一个页面中,他们定义了内部锁定和同步 链接.在这个页面中,他们说:
只要一个线程拥有一个内部锁,没有其他线程可以获得相同的锁.另一个线程在尝试获取锁时将阻塞.
此外,他们在" 锁定同步方法 "一节中提到:
当线程调用synchronized方法时,它会自动获取该方法对象的内部锁,并在方法返回时释放它.即使返回是由未捕获的异常引起的,也会发生锁定释放.
对我来说,这意味着一旦我从其中一个线程调用同步方法,我将拥有该线程的内在锁定,因为
内部锁在同步的两个方面都起作用:强制对对象状态进行独占访问,并建立对可见性至关重要的先发生关系.
另一个线程是否无法调用同一个类的另一个同步方法?如果是,则使同步方法的整个目的失败.不是吗?
我一直AsyncTask在为android的短时间背景操作编写很长一段时间,并且有一个非常基本的问题.如果我一开始AsyncTask从一个单独的线程,而不是在主UI线程,将我onPreExecute()和onPostExecute方法被称为静止在UI线程或从我开始的线程AsyncTask.我很好奇,因为onPreExecute()当我从其他线程启动它时,我无法在方法中显示弹出窗口.
编辑2
I tried writing this simple activity to try:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new Runnable() {
@Override
public void run() {
final TestAsyncTask task = new TestAsyncTask();
task.execute();
}
}).start();
}
private class TestAsyncTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... voids) {
return null;
}
@Override …Run Code Online (Sandbox Code Playgroud) 我有一个包含多个模块的 Android 项目,我想将它们发布到自托管的 maven 存储库。我早些时候将发布代码存在于各个模块中,并且一切正常。我现在正在尝试将发布代码移动到项目中,build.gradle以便我可以重用代码。我的各个模块中的代码是:
afterEvaluate {
// To avoid publishing the applications inside the project...
if (!plugins.hasPlugin("android")) {
publishing {
publications {
mavenAar(MavenPublication) {
artifactId "$project.name"
from components.release
}
}
repositories {
.... My repo details and credentials .......
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
一切都很好。当我将代码移至项目时build.gradle,如下所示:
subprojects {
apply plugin: 'maven-publish'
afterEvaluate {
// To avoid publishing of the applications inside the project ..
if (!plugins.hasPlugin("android")) {
publishing {
publications {
mavenAar(MavenPublication) {
artifactId "$project.name"
from components.release …Run Code Online (Sandbox Code Playgroud) 我最近在阅读关于const在C中使用关键字作为函数参数的方法以及使用它的方法已经在时间和内容中const提到了关键字在C中用于变量并被接受为正确答案.在这篇文章中,有一点提到了这一点
永远不要
const在函数原型中使用值传递的参数.它没有意义,因此只是'噪音'.
我用这种方式,它适用于我,但我不知道为什么这是通过值传递的参数的噪音,但不是参考传递的参数的噪音(更恰当的是C中的指针值,因为没有pass by value和的概念pass by reference在C).因此,当我将指针作为函数参数传递并使用const关键字时,通过这种解释; 我必须为头文件中的声明和C文件中的定义执行此操作,但我不需要const在声明(头文件)中使用关键字作为非指针参数,并且仅在定义函数时使用它C档.
有什么解释吗?
我最近在我的机器上将Android Studio更新为版本
Android Studio 3.1
Build #AI-173.4670197, built on March 22, 2018
JRE: 1.8.0_152-release-1024-b01 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.13.3
Run Code Online (Sandbox Code Playgroud)
另外,我替换了所有compile语句implementation.最后我更新了:
buildToolsVersion to 27.0.3
com.android.tools.build:gradle to 3.1.1
Run Code Online (Sandbox Code Playgroud)
经过这些更改后,我现在尝试构建我的发布版apk,它说如下:
Cannot create android app from an archive '/Users/swapnilgupta/work/musicmuni/riyaz/app/build/intermediates/transforms/proguard/prod/release/0.jar' containing both DEX and Java-bytecode content
Run Code Online (Sandbox Code Playgroud)
使用以下堆栈跟踪
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithMultidexlistForProdRelease'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) …Run Code Online (Sandbox Code Playgroud) 我一直在parse-server用作我的后端,现在将我所有的东西迁移到FireStore(特别是用于存储额外的用户数据)。现在,通过 parse 我可以直接使用ParseUser.getCurrentUser().getString(...). 如果我使用FireStore,我已经创建了一个users集合,我可以document为每个用户存储一个集合,它还支持具有离线支持的本地存储。但我面临的问题是我总是需要使用异步/回调方法从document. 这是android中的一个例子:
final DocumentReference docRef = mFirestore
.collection(USER_COLLECTION).document(mAuthApi.getCurrentUserId());
docRef.get(Source.CACHE).addOnCompleteListener(task -> {
if(task.isSuccessful()) {
......
} else {
......
}
});
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以让我们DocumentReference 假设数据是本地缓存的,从而直接同步获取数据?就像是:
mFirestore.collection(USER_COLLECTION).document(mAuthApi.getCurrentUserId()).getString(...)
Run Code Online (Sandbox Code Playgroud)
这对我来说很容易,因为我需要ParseUser.getCurrentUser().getString(...)用FireStore整个代码库中的等效调用替换。
我有一项活动BasicReactActivity延伸到ReactActivity. 我使用此活动作为基础活动来托管我的反应本机视图。我有一个用例,我BasicReactActivity在另一个之上打开一个实例的多个实例。我面临以下异常崩溃:
Fatal Exception: java.lang.AssertionError: Pausing an activity that is not the current activity, this is incorrect! Current activity: BasicReactActivity Paused activity: BasicReactActivity
at com.facebook.infer.annotation.Assertions.assertCondition(Assertions.java:72)
at com.facebook.react.ReactInstanceManager.onHostPause(ReactInstanceManager.java:549)
at com.facebook.react.ReactDelegate.onHostPause(ReactDelegate.java:63)
at com.facebook.react.ReactActivityDelegate.onPause(ReactActivityDelegate.java:95)
at com.facebook.react.ReactActivity.onPause(ReactActivity.java:51)
at com.apollorncontainer.activities.BasicReactActivity.onPause(BasicReactActivity.java:267)
at android.app.Activity.performPause(Activity.java:8142)
at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1508)
at android.app.ActivityThread.performPauseActivityIfNeeded(ActivityThread.java:4726)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:4687)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:4639)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:228)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2147)
at android.os.Handler.dispatchMessage(Handler.java:107)
Run Code Online (Sandbox Code Playgroud)
onResume()以下是 my和onPause()of的代码BasicReactActivity:
public static Object REACT_DELEGATE_LOCK = new Object();
@Override
protected void …Run Code Online (Sandbox Code Playgroud) 我最近将我的android工作室更新到3.1版本,并将我的gradle更新到4.4版本.从那以后,当我点击EditText应该弹出一个软输入键盘时,我一直面临着这个app进入ANR的问题.点击EditText我看到有多个GC被触发,最终应用程序崩溃,并且ANR消息说堆栈溢出超过8 MB的大小.这是我看到的崩溃:http://crashes.to/s/77a48e5d43c.也粘贴在这里:
Fatal Exception: java.lang.StackOverflowError: stack size 8MB
at android.view.inputmethod.InputConnectionWrapper.reportFullscreenMode(InputConnectionWrapper.java:122)
at android.view.inputmethod.InputConnectionWrapper.reportFullscreenMode(InputConnectionWrapper.java:122)
at android.view.inputmethod.InputConnectionWrapper.reportFullscreenMode(InputConnectionWrapper.java:122)
at android.view.inputmethod.InputConnectionWrapper.reportFullscreenMode(InputConnectionWrapper.java:122)
at android.view.inputmethod.InputConnectionWrapper.reportFullscreenMode(InputConnectionWrapper.java:122)
at android.view.inputmethod.InputConnectionWrapper.reportFullscreenMode(InputConnectionWrapper.java:122)
at android.view.inputmethod.InputConnectionWrapper.reportFullscreenMode(InputConnectionWrapper.java:122)
at android.view.inputmethod.InputConnectionWrapper.reportFullscreenMode(InputConnectionWrapper.java:122)
at android.view.inputmethod.InputConnectionWrapper.reportFullscreenMode(InputConnectionWrapper.java:122)
at android.view.inputmethod.InputConnectionWrapper.reportFullscreenMode(InputConnectionWrapper.java:122)
at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:416)
at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:78)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5268)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)
Run Code Online (Sandbox Code Playgroud)
以下是我如何使用的片段EditText:
<android.support.design.widget.TextInputLayout
android:id="@+id/textInputLayout2"
android:layout_width="@dimen/login_screen_elem_width"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
app:layout_constraintStart_toStartOf="@+id/fbLogin"
app:layout_constraintTop_toBottomOf="@+id/fbLogin">
<android.support.design.widget.TextInputEditText
android:id="@+id/etFirstName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/first_name"
android:imeOptions="flagNoExtractUi|actionNext"
android:inputType="textPersonName"
android:maxLines="1"
android:textColor="@color/secondaryTextColour"
android:textSize="16dp" />
</android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)
仅供参考:当我尝试点击我的文本项时,我也遇到了类似的问题PreferenceFragmentCompat.
android android-edittext android-anr-dialog android-studio android-gradle-plugin
我正在尝试document使用自定义对象将a存储在我的android应用程序中的firestore中。如果我使用Proguard构建应用程序,是否可以像Gson使用@SerializedName批注提供的方式那样为类中的字段指定序列化名称?
我YouTubePlayerSupportFragment在我的一个片段中使用,但我没有在布局文件中使用它,而是以编程方式初始化它。一些用户在运行时面临此崩溃:
Fatal Exception: java.lang.IllegalStateException: Fragment YoutubeLessonFragment{3a2e875} not attached to a context.
at android.support.v4.app.Fragment.requireContext(Fragment.java:614)
at android.support.v4.app.Fragment.getResources(Fragment.java:678)
at android.support.v4.app.Fragment.getString(Fragment.java:700)
at com.musicmuni.riyaz.youtubelesson.YoutubeLessonFragment.loadYoutubeVideo(YoutubeLessonFragment.java:168)
at com.musicmuni.riyaz.youtubelesson.YoutubeLessonPresenter$2.onModuleLoaded(YoutubeLessonPresenter.java:188)
at com.musicmuni.riyaz.data.AppDataRepositoryImpl$10.run(AppDataRepositoryImpl.java:187)
at android.os.Handler.handleCallback(Handler.java:754)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:163)
at android.app.ActivityThread.main(ActivityThread.java:6221)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
Run Code Online (Sandbox Code Playgroud)
我用于初始化 youtube 片段的代码如下:
private YouTubePlayerSupportFragment youtubePlayerFrag;
.........
public void loadYoutubeVideo(String videoId) {
mVideoId = videoId;
if(getContext() != null) {
youtubePlayerFrag = YouTubePlayerSupportFragment.newInstance();
youtubePlayerFrag.initialize(getString(R.string.youtube_api_developer_key),
this);
getChildFragmentManager().beginTransaction().add(R.id.flYoutubeVideoHolder,
youtubePlayerFrag).commit();
}
}
Run Code Online (Sandbox Code Playgroud)
其中,loadYoutubeVideo(...)从正在运行的线程加载所需要的视频ID的背景下得到一个回调。这里有什么指点吗?
android ×8
firebase ×2
java ×2
apk ×1
c ×1
concurrency ×1
const ×1
dex ×1
gradle ×1
header-files ×1
parse-server ×1
pointers ×1
proguard ×1
react-native ×1
timezone ×1
ui-thread ×1