java - 想要访问 firebase cloud firestore 但存在运行时错误

标签 java android firebase google-cloud-firestore

我想访问我的 Firebase 云 firestore,但我的代码中有错误。 不知道为什么这段代码会出现一些错误

我的 Collection 名称是韩文。并想在“韩国”集合中添加文档。所以我调用了一些添加函数 Docsnippets.addShop(,,,)。

为了单独编译,编写了两个Java文件MainActivity.java和Docsnippets.java以及在Mainactivity调用的Docsnippets.addShop()

我认为应该正确运行,但我不知道为什么......

这是我第一次写java&android,很抱歉你读了一些糟糕的代码&english

感谢您阅读我的文章。

//debug
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.term, PID: 18908
    java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.Arrays
        at com.example.term.MainActivity$4.onComplete(MainActivity.java:108)
        at com.google.android.gms.tasks.zzj.run(Unknown Source:4)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7045)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
I/Process: Sending signal. PID: 18908 SIG: 9
Disconnected from the target VM, address: 'localhost:8600', transport: 'socket'
//logcat(?)
2019-04-30 02:17:23.642 3841-3882/? E/WindowManager: RemoteException occurs on reporting focusChanged, w=Window{d179055 u0 com.example.term/com.example.term.MainActivity}
    android.os.DeadObjectException
        at android.os.BinderProxy.transactNative(Native Method)
        at android.os.BinderProxy.transact(Binder.java:1143)
        at android.view.IWindow$Stub$Proxy.windowFocusChanged(IWindow.java:500)
        at com.android.server.wm.WindowState.reportFocusChangedSerialized(WindowState.java:3879)
        at com.android.server.wm.WindowManagerService$H.handleMessage(WindowManagerService.java:5426)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:214)
        at android.os.HandlerThread.run(HandlerThread.java:65)
        at com.android.server.ServiceThread.run(ServiceThread.java:44)
package com.example.term;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.GoogleAuthProvider;
import com.google.firebase.firestore.FirebaseFirestore;

import java.util.Arrays;

public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {


    private static final int RC_SIGN_IN = 10;
    private GoogleApiClient mGoogleApiClient;
    private FirebaseAuth mAuth;
    private EditText editTextEmail;
    private EditText editTextPassword;
    private FirebaseFirestore mFirestore;
    private DocSnippets db;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mFirestore = FirebaseFirestore.getInstance();
        db = new DocSnippets(mFirestore);
        mAuth = FirebaseAuth.getInstance();
        editTextEmail = (EditText) findViewById(R.id.edittext_email);
        editTextPassword = (EditText) findViewById(R.id.edittext_password);
        Button emailLogin = (Button) findViewById(R.id.email_login_button);
        SignInButton googleLogin = (SignInButton) findViewById(R.id.login_button);
        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build();
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .build();

        googleLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
                startActivityForResult(signInIntent, RC_SIGN_IN);

            }
        });
        emailLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                createUser(editTextEmail.getText().toString(), editTextPassword.getText().toString());
            }
        });
    }
    private void createUser(String email, String password) {
        mAuth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (!task.isSuccessful()) {
                        } else {
                            Toast.makeText(MainActivity.this, "Email 가입 성공", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
    }
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RC_SIGN_IN) {
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            if (result.isSuccess()) {
                GoogleSignInAccount account = result.getSignInAccount();
                firebaseAuthWithGoogle(account);
            } else {
            }
        }
    }

    private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
        AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (!task.isSuccessful()) {
                        } else {
                            Toast.makeText(MainActivity.this, "Google 가입 성공", Toast.LENGTH_SHORT).show();
                            db.addShop("Korean", "내가찜한닭", "11:30:22:00", (Arrays) Arrays.asList("안동찜닭", "콜라"),(Arrays) Arrays.asList(18000, 3000));

                        }
                    }
                });
    }

    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
    }
}

'''

'''java
package com.example.term;

import android.support.annotation.NonNull;
import android.util.Log;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.FirebaseFirestoreSettings;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * Snippets for inclusion in documentation.
 */
@SuppressWarnings({"unused", "Convert2Lambda"})
public class DocSnippets implements DocSnippetsInterface {

    private static final String TAG = "DocSnippets";
    private static final ThreadPoolExecutor EXECUTOR = new ThreadPoolExecutor(2, 4,
            60, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
    private final FirebaseFirestore db;
    DocSnippets(FirebaseFirestore db) {
        this.db = db;
    }
    @Override
    public void setup() {
        // [START get_firestore_instance]
        FirebaseFirestore db = FirebaseFirestore.getInstance();
        // [END get_firestore_instance]

        // [START set_firestore_settings]
        FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
                .setPersistenceEnabled(true)
                .build();
        db.setFirestoreSettings(settings);
        // [END set_firestore_settings]
    }

    @Override
    public void addShop(String Kinds, String Shop_name, String Time, Arrays Menu_name, Arrays Menu_price) {
        // [START set_document]
        System.out.println("OH NO!");
        Map<String, Object> shop = new HashMap<>();
        shop.put("name", Shop_name);
        shop.put("time", Time);
        shop.put("menu_name", Menu_name);
        shop.put("menu_price", Menu_price);
        db.collection(Kinds).document(Shop_name)
                .set(shop)
                .addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.d(TAG, "DocumentSnapshot successfully written!");
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.w(TAG, "Error writing document", e);
                    }
                });
        // [END set_document]
    }

    @Override
    public void getShop(String Kinds, String Shop_name) {
        // [START get_document]
        DocumentReference docRef = db.collection(Kinds).document(Shop_name);
        docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                if (task.isSuccessful()) {
                    DocumentSnapshot document = task.getResult();
                    if (document.exists()) {
                        Log.d(TAG, "DocumentSnapshot data: " + document.getData());
                    } else {
                        Log.d(TAG, "No such document");
                    }
                } else {
                    Log.d(TAG, "get failed with ", task.getException());
                }
            }
        });
        // [END get_document]
    }

    @Override
    public void getAllUsers() {
        // [START get_all_users]
        db.collection("users")
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (QueryDocumentSnapshot document : task.getResult()) {
                                Log.d(TAG, document.getId() + " => " + document.getData());
                            }
                        } else {
                            Log.w(TAG, "Error getting documents.", task.getException());
                        }
                    }
                });
        // [END get_all_users]
    }

    @Override
    public void docReference() {
        // [START doc_reference]
        DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");
        // [END doc_reference]
    }

    @Override
    public void collectionReference() {
        // [START collection_reference]
        CollectionReference usersCollectionRef = db.collection("users");
        // [END collection_reference]
    }

    @Override
    public void getAllDocs() {
        // [START get_multiple_all]
        db.collection("cities")
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (QueryDocumentSnapshot document : task.getResult()) {
                                Log.d(TAG, document.getId() + " => " + document.getData());
                            }
                        } else {
                            Log.d(TAG, "Error getting documents: ", task.getException());
                        }
                    }
                });
        // [END get_multiple_all]
    }
}
'''

'''
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.term, PID: 902
    java.lang.RuntimeException: Internal error in Firestore (0.6.6-dev).
        at com.google.android.gms.internal.firebase-firestore.zzkj.run(Unknown Source:21)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7045)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
     Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/util/Function;
        at com.google.android.gms.internal.firebase-firestore.zzfu.zzd(Unknown Source:0)
        at com.google.android.gms.internal.firebase-firestore.zzeg.<init>(Unknown Source:5)
        at com.google.android.gms.internal.firebase-firestore.zzcj.zza(Unknown Source:74)
        at com.google.android.gms.internal.firebase-firestore.zzcl.run(Unknown Source:8)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:459)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at com.google.android.gms.internal.firebase-firestore.zzkg$zza.run(Unknown Source:16)
        at java.lang.Thread.run(Thread.java:764)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.common.util.Function" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.example.term-kj_zrYeYg7nGbyiDIJMp4w==/base.apk", zip file "/data/app/com.example.term-kj_zrYeYg7nGbyiDIJMp4w==/split_lib_dependencies_apk.apk", zip file "/data/app/com.example.term-kj_zrYeYg7nGbyiDIJMp4w==/split_lib_resources_apk.apk", zip file "/data/app/com.example.term-kj_zrYeYg7nGbyiDIJMp4w==/split_lib_slice_0_apk.apk", zip file "/data/app/com.example.term-kj_zrYeYg7nGbyiDIJMp4w==/split_lib_slice_1_apk.apk", zip file "/data/app/com.example.term-kj_zrYeYg7nGbyiDIJMp4w==/split_lib_slice_2_apk.apk", zip file "/data/app/com.example.term-kj_zrYeYg7nGbyiDIJMp4w==/split_lib_slice_3_apk.apk", zip file "/data/app/com.example.term-kj_zrYeYg7nGbyiDIJMp4w==/split_lib_slice_4_apk.apk", zip file "/data/app/com.example.term-kj_zrYeYg7nGbyiDIJMp4w==/split_lib_slice_5_apk.apk", zip file "/data/app/com.example.term-kj_zrYeYg7nGbyiDIJMp4w==/split_lib_slice_6_apk.apk", zip file "/data/app/com.example.term-kj_zrYeYg7nGbyiDIJMp4w==/split_lib_slice_7_apk.apk", zip file "/data/app/com.example.term-kj_zrYeYg7nGbyiDIJMp4w==/split_lib_slice_8_apk.apk", zip file "/data/app/com.example.term-kj_zrYeYg7nGbyiDIJMp4w==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.example.term-kj_zrYeYg7nGbyiDIJMp4w==/lib/arm64, /system/lib64, /system/vendor/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at com.google.android.gms.internal.firebase-firestore.zzfu.zzd(Unknown Source:0) 
        at com.google.android.gms.internal.firebase-firestore.zzeg.<init>(Unknown Source:5) 
        at com.google.android.gms.internal.firebase-firestore.zzcj.zza(Unknown Source:74) 
        at com.google.android.gms.internal.firebase-firestore.zzcl.run(Unknown Source:8) 
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:459) 
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at com.google.android.gms.internal.firebase-firestore.zzkg$zza.run(Unknown Source:16) 
        at java.lang.Thread.run(Thread.java:764) 
        Suppressed: java.io.IOException: No original dex files found for dex location (arm64) /data/app/com.example.term-kj_zrYeYg7nGbyiDIJMp4w==/split_lib_resources_apk.apk
        at dalvik.system.DexFile.openDexFileNative(Native Method)
        at dalvik.system.DexFile.openDexFile(DexFile.java:354)
        at dalvik.system.DexFile.<init>(DexFile.java:101)
        at dalvik.system.DexFile.<init>(DexFile.java:75)
        at dalvik.system.DexPathList.loadDexFile(DexPathList.java:394)
        at dalvik.system.DexPathList.makeDexElements(DexPathList.java:354)
        at dalvik.system.DexPathList.<init>(DexPathList.java:164)
        at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:74)
E/AndroidRuntime:     at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:65)
        at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:64)
        at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:73)
        at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:88)
        at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:74)
        at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:40)
        at android.app.LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:764)
        at android.app.LoadedApk.getClassLoader(LoadedApk.java:847)
        at android.app.LoadedApk.getResources(LoadedApk.java:1088)
        at android.app.ContextImpl.createAppContext(ContextImpl.java:2563)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6095)
        at android.app.ActivityThread.access$1200(ActivityThread.java:237)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1785)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7045)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
'''

最佳答案

异常说:

ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.Arrays

这与您具有此格式的两个语句相关:

(Arrays) Arrays.asList("안동찜닭", "콜라")

如果你查看错误消息,并到documentation ,您将看到 Arrays.asList 返回一个 List 而不是 Arrays

如果您确实需要,可以将结果转换为 ArrayList:

(ArrayList) Arrays.asList("안동찜닭", "콜라")

但我强烈建议不要这样做,只需删除 Actor 阵容即可。仅使用 List 就不太可能在将来出现问题:

Arrays.asList("안동찜닭", "콜라")

关于java - 想要访问 firebase cloud firestore 但存在运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55907674/

相关文章:

android - Android Gradle构建配置-重命名生成的APK

android - 移动图像按钮后,应用程序崩溃!安卓

android - Firebase:服务中的 onDisconnect()

ios - iOS 8与iOS 10上的Firebase动态链接行为

java - 在Android中使用restTemplate.getForObject反序列化JSON对象的正确方法

java - 映射大量多头的最快方法

java - 将用户输入存储在字符串数组中

java - Java 中的开关不改变状态

android - 如何修复 "Expected NDK STL shared object file"?

java - 无法转换 java.util.Arraylist 类型的对象 从 Firebase 实时数据库嵌套对象读取