只是想知道在活动之间传递信息,将其添加到捆绑包或使用单例类来存储和访问此数据是一种更好的做法.我过去曾经使用过两个android方面的项目,但我现在正在开发一个规模大得多的android项目,所以我宁愿在开始时做正确的事情.
我的应用程序对用户进行身份验证,然后必须根据它的id进行各种查询.为了最大限度地减少活动之间的耦合,我认为只需将id添加到包中,然后让每个活动查询它所需的信息,这将是最好的选择; 然而,为了提高响应能力,我倾向于使用单例类来存储持久性信息,从而阻止了比需要更多的查询.
singleton android android-lifecycle android-activity android-bundle
我阅读了有关getInt()方法的文档:
public int getInt(String key)
返回与给定键关联的值,如果给定键不存在所需类型的映射,则返回0.
参数:
键一个字符串
返回:
一个int值
但我无法理解它究竟归来的东西.
它的ID key是在R.java还是没有别的???
我正在查看我的应用程序的Crashlytics日志,发现某些设备上存在NullPointerException,因为getIntent()。getExtras()返回null。
仅在少数设备上可以看到此行为,并且我无法重现此错误。我知道我可以检查活动是否Bundle为null并防止NullPointerException,但我对找出此行为的根本原因更感兴趣。
编辑:
资源 -
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Cursor c = (Cursor) parent.getAdapter().getItem(position);
Intent intent = new Intent(getActivity(), SelectedTopicActivity.class);
intent.putExtra("topicId", c.getLong(c.getColumnIndex(AppContract.TopicsEntry._ID)));
startActivity(intent);
}
});
Run Code Online (Sandbox Code Playgroud)
目的地-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_selected_topic);
Bundle bundle = getIntent().getExtras();
topicId = bundle.getLong("topicId");
...
}
Run Code Online (Sandbox Code Playgroud)
如果光标为空,则源本身中将出现错误。我不认为光标中的字段为null,否则该项目将不会首先出现在列表中。
在请求授予 Android 危险权限期间,是否有任何方法可以发送捆绑包/附加内容(就像我们对意图所做的那样)?
在为android授予危险权限的正常过程中,我们应该ActivityCompat.requestPermissions(...)根据文档调用如下定义:
void requestPermissions (Activity activity, String[] permissions,int requestCode)
Run Code Online (Sandbox Code Playgroud)
可以看出,没有选项可以在权限请求中发送任何额外信息。目前,我在活动中使用静态参数在获得我的许可后恢复它们。
我想知道有什么选择吗?
android-permissions android-bundle runtime-permissions dangerous-permissions
我发现这是捕捉照片和接收全尺寸照片而不是缩略图的常见问题(根据:http://developer.android.com/training/camera/photobasics.html).拍摄照片和接收缩略图很容易,但教程的其余部分似乎不完整且无法正常工作.有人轻松解决了吗?
public class TakePhoto extends Activity{
static final int REQUEST_IMAGE_CAPTURE = 1;
static final int REQUEST_TAKE_PHOTO = 1;
private String mCurrentPhotoPath;
private ImageView mImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.take_photo);
mImageView = (ImageView) findViewById(R.id.imageView);
dispatchTakePictureIntent();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
mImageView.setImageBitmap(imageBitmap);
}
}
private void dispatchTakePictureIntent() {
Intent takePictureIntent = …Run Code Online (Sandbox Code Playgroud) class CholesterolPagingFragment: Fragment() {
companion object {
fun newInstance(): CholesterolPagingFragment {
val args = Bundle()
val fragment = CholesterolPagingFragment()
fragment.arguments = args
return fragment
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_paging_cholesterol, container, false)
return view
}
}
Run Code Online (Sandbox Code Playgroud)
我在Kotlin中编写了上面的代码来初始化一个片段.虽然我无法找到将对象列表(例如:)传递List<Human>给此片段的方法.我试过Bundle()但却找不到合适的方法.
当我尝试使用android studio 3.2 canary 17构建应用程序捆绑包时,出现以下错误消息。我不知道什么丢失了尖括号通过我所有的proguard文件,一切似乎都很好,并且在android studio的旧版本中工作。gradle构建工具是com.android.tools.build:gradle:3.2.0-alpha17,分发网址是distributionUrl = https://services.gradle.org/distributions/gradle-4.6-all.zip
java.lang.RuntimeException: Job failed, see logs for details
at com.android.build.gradle.internal.transforms.ProGuardTransform.transform(ProGuardTransform.java:194)
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:239)
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:235)
at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:230)
at sun.reflect.GeneratedMethodAccessor915.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:50)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:124)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:113)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:95)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:73)
at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ResolveBuildCacheKeyExecuter.execute(ResolveBuildCacheKeyExecuter.java:66)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) …Run Code Online (Sandbox Code Playgroud) 我正在使用Bundle在活动和片段之间传输数据。当我从一个片段导航到新片段时,没有传输数据或Bundle用于获取数据,应用程序崩溃并出现以下错误。
> > 10-09 11:36:09.100 467-467/? E/JavaBinder: !!! FAILED BINDER TRANSACTION !!! (parcel size = 558780) 10-09 11:36:09.101 467-467/?
> D/AndroidRuntime: Shutting down VM 10-09 11:36:09.101 467-467/?
> E/AndroidRuntime: FATAL EXCEPTION: main
Run Code Online (Sandbox Code Playgroud)
进程:com.xxxx.xxxxmobileapp.debug,PID:467 java.lang.RuntimeException:android.os.TransactionTooLargeException:android.app.ActivityThread$StopInfo.run(ActivityThread.java:4156) 的数据包大小为 558780 字节。 os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main (ActivityThread.java:6682) 在 java.lang.reflect.Method。invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) 由:android. os.TransactionTooLargeException:android.os.BinderProxy.transactNative(Native Method) at android.os.BinderProxy.transact(Binder.java:628) at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:4149) 的数据包大小为 558780 字节) 在 android.app.ActivityThread$StopInfo。在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java) 上运行(ActivityThread.java:4148) :154) 在 android.app.ActivityThread.main(ActivityThread.java:6682) 在 java.lang.reflect.Method.invoke(Native Method) …
我正在研究本机反应。当我尝试使用创建 Android 版本时
gradlew assembleRelease
Run Code Online (Sandbox Code Playgroud)
然后得到一个
* What went wrong:
Execution failed for task ':app:bundleReleaseJsAndAssets'.
> Process 'command 'npx.cmd'' finished with non-zero exit value 1
Run Code Online (Sandbox Code Playgroud)
但是当我使用下面的命令创建构建时成功构建
gradlew assembleRelease -x bundleReleaseJsAndAssets
Run Code Online (Sandbox Code Playgroud)
但构建无法在移动设备上运行,因为我在安装后打开我的应用程序,它崩溃了。
此外,当我尝试使用相同的代码在不同的系统(8gm ram)上创建构建时,它会使用相同的命令创建构建,并且构建将成功创建。给我一个解决方案,
谷歌的 Ian Lake 已经回答了这个问题。有人建议我在 StackOverflow 上重新创建这个问题并自己回答,所以它可能会帮助其他人搜索它:)
使用导航 API 和 SafeArgs 时:
val args: SomeFragmentArgs by navArgs()
Run Code Online (Sandbox Code Playgroud)
args活动被系统杀死并重新创建后,该字段是否保留其值?换句话说:发送到 Fragment 的 Bundle 是否存在?
android android-fragments kotlin android-bundle android-architecture-navigation
android-bundle ×10
android ×7
kotlin ×2
android-architecture-navigation ×1
java ×1
proguard ×1
react-native ×1
singleton ×1