当前位置: 首页 > 知识库问答 >
问题:

Firebase getKey返回long,未能将String类型java.lang.值转换为long

邹高峻
2023-03-14

我试图检索值从数据库显示在视图但我得到这个崩溃就在这里

致命异常:主进程:com。实例艾哈迈德。卡伦塔尔,PID:15975 com.google.火力基地。数据库DatabaseException:未能转换java类型的值。在com上使用长字符串。谷歌。Androidgms。内部的zzear。zzb(未知来源)在com.google.Androidgms。内部的zzear。zza(未知来源)在com上。谷歌。Androidgms。内部的zzear。zzb(未知来源)在com.google.Androidgms。内部的zzeas。zze(未知来源)在com.google.Androidgms。内部的zzear。zzb(未知来源)在com.google.Androidgms。内部的zzear。zza(未知来源)在com上。谷歌。火力基地。数据库数据快照。获取com上的值(未知源)。实例艾哈迈德。卡伦塔尔。公用事业FirebaseUtilities。getCarData(FirebaseUtilities.java:178)的网站。实例艾哈迈德。卡伦塔尔。卡波斯特。CreatePostActivity$1$1。com上的onDataChange(CreatePostActivity.java:100)。谷歌。Androidgms。内部的zzduz。zza(未知来源)在com上。谷歌。Androidgms。内部的zzdwu。zzbvb(未知来源)位于com.google.Androidgms。内部的zzdxa。在android上运行(未知来源)。操作系统。汉德勒。android上的handleCallback(Handler.java:761)。操作系统。汉德勒。android上的dispatchMessage(Handler.java:98)。操作系统。活套。android上的loop(Looper.java:156)。应用程序。活动线程。java上的main(ActivityThread.java:6605)。朗,反思一下。方法在com上调用(本机方法)。Android内部的操作系统。ZygoteInit$MethodandArgscaler。在com上运行(zyteinit.java:999)。Android内部的操作系统。合子岩。main(ZygoteInit.java:889)

课程如下

汽车模型

public class Car {

    private String brand;
    private String id;
    private int price;
    private String model;
    private long distance;
    private String status;
    private String picture;
    private String location;
    private String description;

    public Car() {
    }

    public Car(String brand, String id, int price, String model, long distance, String status, String picture, String location, String description) {
        this.brand = brand;
        this.id = id;
        this.price = price;
        this.model = model;
        this.distance = distance;
        this.status = status;
        this.picture = picture;
        this.location = location;
        this.description = description;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public long getDistance() {
        return distance;
    }

    public void setDistance(long distance) {
        this.distance = distance;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getPicture() {
        return picture;
    }

    public void setPicture(String picture) {
        this.picture = picture;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

用户模型

  public class User {
        private String email;
        private String id;
        private String name;
        private int phonenumber;

        public User(String email, String id, String name,int phonenumber) {
            this.email = email;
            this.id = id;
            this.name = name;
            this.phonenumber = phonenumber;
        }
        public User(){

        }

        public int getPhonenumber() {
            return phonenumber;
        }

        public void setPhonenumber(int phonenumber) {
            this.phonenumber = phonenumber;
        }

        public String getEmail() {
            return email;
        }

        public void setEmail(String email) {
            this.email = email;
        }

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

数据库查询功能

public Car getCarData(DataSnapshot dataSnapshot) {
        Log.i(TAG,"getCardData: Getting car data from database");

        Car data = new Car();
        for(DataSnapshot ds :dataSnapshot.getChildren()){
            if(ds.getKey().equals(context.getString(R.string.dbname_car_post))){
                try{
                    data.setId(ds.child(userID).getValue(Car.class).getId());
                    data.setBrand(ds.child(userID).getValue(Car.class).getBrand());
                    data.setDescription(ds.child(userID).getValue(Car.class).getDescription());
                    data.setModel(ds.child(userID).getValue(Car.class).getModel());
                    data.setDistance(ds.child(userID).getValue(Car.class).getDistance());
                    data.setPicture(ds.child(userID).getValue(Car.class).getPicture());
                    data.setStatus(ds.child(userID).getValue(Car.class).getStatus());
                    data.setLocation(ds.child(userID).getValue(Car.class).getLocation());
                    data.setPrice(ds.child(userID).getValue(Car.class).getPrice());
                }catch (NullPointerException e){
                    Log.d(TAG, "getCarData: NullPointerException : " + e.getMessage());
                }
            }
        }
        return data;
    }

我从中检索数据的活动

CreateCarPost活动

public class CreatePostActivity extends AppCompatActivity implements CreatePostView,AdapterView.OnItemSelectedListener{

    //Activity Tag
    private static final String TAG ="CreateCarPost";
    //Spinners
    Spinner statusSpinner;
    Spinner brandSpinner;
    //Adapter of spinners
    ArrayAdapter mArrayAdapter;
    ArrayAdapter mArrayAdapter2;

    //views
    private TextView tvDistance;
    private EditText etDistance;
    private AutoCompleteTextView etCarLocation;
    private CircleImageView civPicture;
    private EditText etPrice;
    private EditText etDescription;
    private EditText etModel;
    private ImageView checkButton;

    //Strings
    private String carLoactionStr;
    private String carBrandStr;
    private String carStatusStr;

    //layout containg the views
    private LinearLayout layoutContainer;
    //To adjust dynamic views margins
    LinearLayout.LayoutParams layoutParamsTv,layoutParamsEt;

    //Firebase
    private FirebaseAuth mAuth;
    private FirebaseAuth.AuthStateListener mAuthStateListener;
    private FirebaseDatabase mFirebaseDatabase;
    private DatabaseReference mDatabaseReference;
    private ValueEventListener singleValueEventListener;
    private FirebaseUtilities mFirebaseUtilities;

    Context mContext;
    CreatePostPresenter createPostPresenter;
    private Car car;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create_post);

        initialization();
        setupFirebaseAuth();
        setUpLocationSpinner();


        //Assigning Car object with its data from database.
        io.reactivex.Observable.create(new ObservableOnSubscribe() {
            @Override
            public void subscribe(ObservableEmitter emitter) throws Exception {
                singleValueEventListener = new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        car = mFirebaseUtilities.getCarData(dataSnapshot);
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                        Log.e(TAG, "CANCELLED.");
                    }
                };
                mDatabaseReference.addValueEventListener(singleValueEventListener);
            }
        }).unsubscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe();


        checkButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                createPostPresenter.onSaveChanges(car);
            }
        });

    }

    //initalizing everything necessary here
    public void initialization(){

        mContext = getApplicationContext();
        createPostPresenter = new CreatePostPresenter(this,this);

        //Adapter set up for spinners
        mArrayAdapter2 = ArrayAdapter.createFromResource(this,R.array.car_brands,android.R.layout.simple_spinner_item);
        mArrayAdapter = ArrayAdapter.createFromResource(this,R.array.car_status_array,android.R.layout.simple_spinner_item);

        //Status spinner set up
        statusSpinner = findViewById(R.id.createPostCarStatusSpinner_ID);
        statusSpinner.setAdapter(mArrayAdapter);
        statusSpinner.setOnItemSelectedListener(this);
        //Brand spinner set up
        brandSpinner = findViewById(R.id.createPostCarBrandSpinner_ID);
        brandSpinner.setAdapter(mArrayAdapter2);
        brandSpinner.setOnItemSelectedListener(this);

        layoutContainer = findViewById(R.id.createPostLinearLayout_ID);
        tvDistance = new TextView(this);
        tvDistance.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        tvDistance.setText("Distance Travelled");
        etDistance = new EditText(this);
        etDistance.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));

        //margin settings editText
        layoutParamsEt = (LinearLayout.LayoutParams)etDistance.getLayoutParams();
        layoutParamsEt.setMargins(0,10,0,0);
        etDistance.setLayoutParams(layoutParamsEt);

        //margin settings textView
        layoutParamsTv = (LinearLayout.LayoutParams)tvDistance.getLayoutParams();
        layoutParamsTv.setMargins(0,10,0,0);
        tvDistance.setLayoutParams(layoutParamsTv);

        etCarLocation = findViewById(R.id.createPostCarLocation_ID);
        etDescription = findViewById(R.id.createPostCarDes_ID);
        etPrice = findViewById(R.id.createPostCarPrice_ID);
        etModel = findViewById(R.id.createPostCarModel_ID);
        checkButton = findViewById(R.id.check_ID);
        mFirebaseUtilities = new FirebaseUtilities(this);
    }

    private void setUpLocationSpinner() {

        ArrayAdapter<String> listOfCities = new ArrayAdapter<>(getBaseContext(),
                android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.TR_cities));

        //--- to ensure user is restricted to selections from drop-down menu
        etCarLocation.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                carLoactionStr = etCarLocation.getAdapter().getItem(position).toString();
            }
        });

        etCarLocation.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                for (int i = 0; i < etCarLocation.getAdapter().getCount(); i++) {
                    if (etCarLocation.getText().toString().equals(etCarLocation.getAdapter().getItem(i))) {
                        carLoactionStr = etCarLocation.getAdapter().getItem(i).toString();
                    } else
                        carLoactionStr = null;
                }
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });


        //start autocomplete after 1 letter
        etCarLocation.setThreshold(1);
        etCarLocation.performCompletion();
        etCarLocation.setAdapter(listOfCities);
    }

    /**
     * Listener for car status spinner
     * @param parent
     * @param view
     * @param position
     * @param id
     */
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        Spinner spinner = (Spinner)parent;

        if(spinner.getId() == R.id.createPostCarStatusSpinner_ID){
            TextView textView = (TextView) view;
            carStatusStr = textView.getText().toString();
            addDynamicViews(position);
        }
        else if(spinner.getId() == R.id.createPostCarBrandSpinner_ID){
            TextView textView = (TextView) view;
            carBrandStr = textView.getText().toString();
        }

    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }

    /**
     * Dynamic views creation done by handling user spinner selection for first hand or second hand car status.
     *@param position: position of selected value from spinner
     */
    public void addDynamicViews(int position){
        if(position == 1){
            layoutContainer.addView(tvDistance);
            layoutContainer.addView(etDistance);
        }
        else if(position == 0){
            mFirebaseUtilities.removeNodeDynamically();
            layoutContainer.removeView(tvDistance);
            layoutContainer.removeView(etDistance);
        }
    }

    @Override
    public void setBrand(String brand) {

    }

    @Override
    public void setPrice(int price) {

    }

    @Override
    public void setLocation(String location) {

    }

    @Override
    public void setDescription(String description) {

    }

    @Override
    public void setModel(String model) {

    }

    @Override
    public void setDistance(long distance) {

    }

    @Override
    public void setStatus(String status) {

    }

    @Override
    public void setPicture(String picture) {

    }

    @Override
    public String getBrand() {
        return carBrandStr;
    }

    @Override
    public String getDescription() {
        return etDescription.getText().toString();
    }

    @Override
    public String getLocation() {
        return carLoactionStr;
    }

    @Override
    public String getModel() {
        return etModel.getText().toString();
    }

    @Override
    public String getStatus() {
        return carStatusStr;
    }

    @Override
    public String getPicture() {
        return null;
    }

    @Override
    public int getPrice() {
        String priceViewTemp = etPrice.getText().toString();
        if (priceViewTemp.equals("")) {
            return 0;
        } else {
            return Integer.valueOf(etPrice.getText().toString());
        }
    }

    @Override
    public long getDistance() {
        String distanceViewTemp = etDistance.getText().toString();
        if (distanceViewTemp.equals("")) {
            return 0;
        } else {
            return Integer.valueOf(etDistance.getText().toString());
        }
    }

    /*************************************** Firebase *******************************************/
    private void setupFirebaseAuth() {
        mAuth = FirebaseAuth.getInstance();

        mFirebaseDatabase = FirebaseDatabase.getInstance();
        mDatabaseReference = mFirebaseDatabase.getReference();

        mAuthStateListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser user = firebaseAuth.getCurrentUser();

                if (user != null) {
                    //User is signed in
                    Log.d(TAG, "onAuthStateChanged: user signed in : " + user.getUid());
                } else {
                    //User is signed out
                    Log.d(TAG, "onAuthStateChanged: user signed out");
                }
            }
        };

        mDatabaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {


            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
    @Override
    public void onPause() {
        super.onPause();
        if (singleValueEventListener != null) {
            mDatabaseReference.removeEventListener(singleValueEventListener);
        }
    }
    @Override
    public void onResume(){
        super.onResume();
        mDatabaseReference.addListenerForSingleValueEvent(singleValueEventListener);
    }

}

火基结构

火基结构

共有1个答案

刘浩思
2023-03-14

没读过多少书,但我第一次注意到这里的一些东西。

for(DataSnapshot ds :dataSnapshot.getChildren()){
        if(ds.getKey().equals(context.getString(R.string.dbname_car_post))){
            try{ }

您试图检索的密钥是一个对象。所以我建议我们先把它转换成字符串,在这里采样。

for(DataSnapshot ds :dataSnapshot.getChildren()){
    Object myKey=ds.getKey;
        if(myKey.toString().equals(context.getString(R.string.dbname_car_post))){
            try{ }

}}

让我知道接下来会发生什么!

 类似资料:
  • 问题内容: 我需要将格式为“ dd / mm / yyyy”的字符串转换为长型。为了将值传递给android中的calendarProvider。 目前我有: 我需要: 我已经尝试过使用SimpleDateFormat,但是在获取正确的类型时遇到了问题。任何帮助将非常感激。 问题答案: 您可以使用以下代码从字符串日期中以“ dd / mm / yyyy”格式获取长值(自格林尼治标准时间1970年1

  • 我正在编写一个jenkins管道,我需要将String参数转换为Long值。 我已经使用Long.value,Long.parse。我得到这个错误消息: Hudson . remoting . proxy exception:groovy . lang . missingmethodexception:没有方法的签名:java.lang.Class.parseLong()适用于参数类型:(java

  • 我希望代码得到一个int作为参数,如果年龄是奇数,则加3,如果是偶数,则加2,然后作为字符串返回。 有了这个代码我得到了 不兼容的类型:无法将int转换为字符串 九号线不是已经换了吗?

  • 我在尝试按照firebase数据库的文档将数据检索到要使用的对象时,遇到了一个错误。 这是我的对象模型 最后,代码 这是我在Firebase中的数据库结构。 来自 logcat 的完整 Stacktrace 就在这里。

  • 问题内容: 如何在Java中将 转换为a 并返回? 我正在尝试将a转换为a,以便能够通过TCP连接发送。另一方面,我想将其转换为。 问题答案: 或包装在一个类中,以避免重复创建: 由于它变得如此流行,我只想提一提,我认为在大多数情况下,最好使用像这样的库。而且,如果你对库有一些奇怪的反对意见,则可能应该首先针对本机Java解决方案考虑此答案。我认为我的答案真正要解决的主要问题是,你不必自己担心系统

  • 我有一个函数从服务器获取一个文件并解析了该文件,我正在使用一个具有如下完成处理程序的函数来获取该文件 但是,当我尝试使用该函数时 我得到无法将类型“()”的返回表达式转换为返回类型“String”的错误。 知道我做错了什么吗?