将文件上传到Firebase后,如何获取该URL,以便将其存储以供日后使用?我想将URL写入Firebase数据库,以便其他用户可以访问该图像.
我正在上传文件:
public void uploadFile()
{
StorageReference filepath = mstorageRef.child("folder").child(filename);
Uri File= Uri.fromFile(new File(mFileName));
filepath.putFile(File).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot)
{
Toast.makeText(MtActivity.this, "Upload Done", Toast.LENGTH_LONG).show();
}
});
}
Run Code Online (Sandbox Code Playgroud)
我已经确认文件实际上是上传的,所以现在我只需要我可以写入数据库的URL.但是,当我尝试这样做时:
Uri downloadUrl = taskSnapshot.getMetadata().getDownloadUrl();
Run Code Online (Sandbox Code Playgroud)
它给了我一个错误并说 This method should only be accessed from tests or within private scope
我不确定这意味着什么,我也不知道为什么我会得到这个错误,因为我正在按照Firebase提供的这个例子.
是否有获取URL的新方法?
此外,该特定于该项目的URL是否是唯一的?这意味着如果我将它存储到数据库并尝试以后访问它,我能够这样做吗?
我是 Kotlin 的初学者,我看过一些关于数据类的示例代码,似乎参数都是 val 类型,就像代码 A
我需要改变数据类MSetting的一些值,所以我设计了Code B,你能告诉我Code B是不是好方法?
代码 A
data class MSetting (
val _id: Long,
val name: String,
val createdDate: Long,
val description: String
)
Run Code Online (Sandbox Code Playgroud)
代码 B
data class MSetting (
var _id: Long,
var name: String,
var createdDate: Long,
var description: String
)
Run Code Online (Sandbox Code Playgroud) 查看一些 Google 演示应用程序(如向日葵或 Google io 2018 应用程序)的代码,我注意到对于 viemodels 的支持属性,它们使用具有自定义 getter 的相同类型的单独实例;像这样:
private val _userData: MutableLiveData<User>
val userData: LiveData<User>
get() = _userData
Run Code Online (Sandbox Code Playgroud)
但他们为什么要这样做?直接使_userData可访问性不是更好吗?难道是因为虽然_userData是MutableLiveData他们不想观察者能够改变的价值呢?
我在 Android Studio 中使用导航编辑器来实现Safe Args.
我在一个片段中接受参数为
<fragment
android:id="@+id/gameWonFragment"
android:name="com.example.android.navigation.GameWonFragment"
android:label="@string/android_trivia"
tools:layout="@layout/fragment_game_won">
<action
android:id="@+id/action_gameWonFragment_to_gameFragment"
app:destination="@id/gameFragment"
app:popUpTo="@+id/titleFragment">
</action>
<argument
android:name="numQuestions"
app:argType="integer"
android:defaultValue="0" />
<argument
android:name="numCorrect"
app:argType="integer"
android:defaultValue="0" />
</fragment>
Run Code Online (Sandbox Code Playgroud)
在我的片段中,我将参数发送为
view.findNavController().navigate(GameFragmentDirections.actionGameFragmentToGameWonFragment(numQuestions, questionIndex))
Run Code Online (Sandbox Code Playgroud)
但是,GameFragmentDirections.actionGameFragmentToGameWonFragment()不想接受论据。我试过Clean Project和Rebuild Project。
这是抛出:
Too many arguments for @NonNull public open fun actionGameFragmentToGameWonFragment(): GameFragmentDirections.ActionGameFragmentToGameWonFragment defined in com.example.android.navigation.GameFragmentDirections
Run Code Online (Sandbox Code Playgroud) android android-studio android-jetpack androidx android-jetpack-navigation
我正在使用新的 Jetpack 库 CameraX 制作一个简单的相机应用程序。\n只要我通过添加依赖项来启动应用程序,它就会崩溃。
\n\n依赖项:
\n\nimplementation "androidx.camera:camera-core:1.0.0-alpha06"\nimplementation "androidx.camera:camera-camera2:1.0.0-alpha06"\nRun Code Online (Sandbox Code Playgroud)\n\n崩溃日志:
\n\n2019-11-28 16:16:45.828 26428-26428/? E/AndroidRuntime: FATAL EXCEPTION: main\nProcess: com.ananth.camerax, PID: 26428\njava.lang.RuntimeException: Unable to get provider androidx.camera.camera2.impl.Camera2Initializer: java.lang.ClassNotFoundException: Didn\'t find class "androidx.camera.camera2.impl.Camera2Initializer" on path: DexPathList[[zip file "/data/app/com.ananth.camerax-5fK5oVGKPPgZn_ITpYwEsA==/base.apk"],nativeLibraryDirectories=[/data/app/com.ananth.camerax-5fK5oVGKPPgZn_ITpYwEsA==/lib/arm64, /system/lib64, /system/vendor/lib64]]\n at android.app.ActivityThread.installProvider(ActivityThread.java:6444)\n at android.app.ActivityThread.installContentProviders(ActivityThread.java:5946)\n at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5858)\n at android.app.ActivityThread.-wrap1(Unknown Source:0)\n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1690)\n at android.os.Handler.dispatchMessage(Handler.java:105)\n at android.os.Looper.loop(Looper.java:173)\n at android.app.ActivityThread.main(ActivityThread.java:6698)\n at java.lang.reflect.Method.invoke(Native Method)\n at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:782)\n Caused by: java.lang.ClassNotFoundException: Didn\'t find class "androidx.camera.camera2.impl.Camera2Initializer" on path: DexPathList[[zip file "/data/app/com.ananth.camerax-5fK5oVGKPPgZn_ITpYwEsA==/base.apk"],nativeLibraryDirectories=[/data/app/com.ananth.camerax-5fK5oVGKPPgZn_ITpYwEsA==/lib/arm64, /system/lib64, /system/vendor/lib64]]\n at …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用chechboxes为Android手机上的已安装应用程序制作列表视图.我将图标放在ArrayList中,如下所示
packs = new ArrayList<String>(); // a list of all the packages
names = new ArrayList<String>(); // a list of all the apps names
icons = new ArrayList<Drawable>(); // a list of all apps drawable images
List<ApplicationInfo> packages = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo packageInfo : packages) {
if ((packageInfo.flags & ApplicationInfo.FLAG_SYSTEM) !=1){ // 'if' is to remove all system applications
packs.add((String) packageInfo.packageName);
names.add((String) packageManager.getApplicationLabel(packageInfo));
icons.add((Drawable) packageManager.getApplicationIcon(packageInfo));
Run Code Online (Sandbox Code Playgroud)
然后把它放在listview上,我用它.
icon = (ImageView) row.findViewById(R.id.appIcon);
icon.setImageDrawable(icons.get(position));
Run Code Online (Sandbox Code Playgroud)
但是,它强制关闭,问题出在icon.setImageDrawable(icons.get(position)); 我该如何解决?
我在Android Studio中创建了一个Scratch Kotlin文件.我只是想运行这个scratch.kt文件并获得输出.
我摆弄了Run Cofigurations但却无法理解将进入Main Class的内容.