gpt4 book ai didi

java - 无法将 java.lang.String 类型的对象转换为 com.example.ezcompras.model.Lojas 类型

转载 作者:行者123 更新时间:2023-12-01 23:54:56 24 4
gpt4 key购买 nike

我正在尝试获取 child 值(value)观,我已经在其他 Activity 中获取了一些值(value)观,并且没有任何问题。现在,我在新 Activity 中创建了一个新监听器,但没有获得值。我可以找到但无法传递给我的对象;我将添加一些代码来尝试解释我所说的内容。

我想要红色的(已编辑)(https://cdn.discordapp.com/attachments/375765058992603136/630091075226173479/unknown.png)

错误

( https://cdn.discordapp.com/attachments/375765058992603136/628991006217469953/unknown.png )

我正在保存对象的值(这是我的寄存器 Activity )

 private void salvarComerciantePt2() { //save store object

if (dados != null && localizacao != null) {
String categoria = spinnerCategoria.getSelectedItem().toString();//geting a category
if(categoria != null){
empresa.setNomeProprietario((String) dados.get("nomeProprietario"));
empresa.setTelefone((String) dados.get("telefone"));
empresa.setEmail((String) dados.get("email"));
empresa.setCpf((String) dados.get("cpf"));
empresa.setCnpj((String) dados.get("cnpj"));
empresa.setSenha((String) dados.get("senha"));
empresa.setLocalizacao(localizacao);
empresa.setCategoria(categoria);
empresa.setNomeEmpresa(inputNomeEmpresa.getText().toString());
criaUsuarioFirebase(empresa.getEmail(), empresa.getSenha());// create firebase user
}




}
}

在这里,我尝试从 firebase 获取值(我想获取子 localizacao)

在此之后调试,我的代码崩溃了

( https://cdn.discordapp.com/attachments/375765058992603136/629010455473684493/unknown.png )

private void recuperarLocalizacao(){

DatabaseReference lojaRef = mDatabase
.child("empresa")
.child(idLoja) //idStore
.child("localizacao");

lojaRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

for (DataSnapshot ds : dataSnapshot.getChildren()) {
local = ds.getValue(Localizacao.class); // try to pass values to my Localizacao.java
}

// Double latitude = local.getLatitude();

}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});
}

这里我正在 Localizacao.java 上保存值(这是我的注册 Activity )

 private void autoComplete() {
AutocompleteSupportFragment autocompleteFragment = (AutocompleteSupportFragment)
getSupportFragmentManager().findFragmentById(R.id.autocomplete_fragment);

autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME, Place.Field.LAT_LNG));

autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
@Override
public void onPlaceSelected(Place place) {
// TODO: Get info about the selected place.
Log.i("PlaceCerto", "Place: " + place.getName() + ", " + place.getId());
Geocoder geocoder = new Geocoder(CadastroPt2Activity.this, Locale.getDefault());
try {
List<Address> listaEnderecos = geocoder.getFromLocationName(place.getName(), 1);
if(listaEnderecos != null && listaEnderecos.size() >0){
Address address = listaEnderecos.get(0);
localizacao.setLatitude(place.getLatLng().latitude); // save latitude
localizacao.setLongitude(place.getLatLng().longitude); // save longitude
salvaLocal(address);
}
} catch (IOException e) {
e.printStackTrace();
}

}

@Override
public void onError(Status status) {
// TODO: Handle the error.
Log.i("PlaceErrado", "An error occurred: " + status);
}
});
}

private void salvaLocal(Address address){// save place

localizacao.setEstado(address.getAdminArea());
localizacao.setCidade(address.getCountryName());
localizacao.setCep(address.getPostalCode());
localizacao.setBairro(address.getSubLocality());
localizacao.setRua(address.getThoroughfare());
localizacao.setNumero(address.getFeatureName());
}

Localizacao.java

package com.example.ezcompras.model;

公共(public)本地化类(class){

private String estado;
private String cidade;
private String bairro;
private String rua;
private String numero;
private String cep;
private Double latitude;
private Double longitude;

public Localizacao() {
}

public String getEstado() {
return estado;
}

public void setEstado(String estado) {
this.estado = estado;
}

public String getCidade() {
return cidade;
}

public void setCidade(String cidade) {
this.cidade = cidade;
}

public String getBairro() {
return bairro;
}

public void setBairro(String bairro) {
this.bairro = bairro;
}

public String getRua() {
return rua;
}

public void setRua(String rua) {
this.rua = rua;
}

public String getNumero() {
return numero;
}

public void setNumero(String numero) {
this.numero = numero;
}

public String getCep() {
return cep;
}

public void setCep(String cep) {
this.cep = cep;
}

public Double getLatitude() {
return latitude;
}

public void setLatitude(Double latitude) {
this.latitude = latitude;
}

public Double getLongitude() {
return longitude;
}

public void setLongitude(Double longitude) {
this.longitude = longitude;
}

}

在 firebase 上创建用户(这是我的注册 Activity )

private void criaUsuarioFirebase (String email, String senha){

mAuth.createUserWithEmailAndPassword(email, senha)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
//Log.d("TagCerta", "createUserWithEmail:success");
FirebaseUser user = mAuth.getCurrentUser();

empresa.salvar(); //writing values
Intent inicio = new Intent(CadastroPt2Activity.this, NavegationActivity.class);
String categoria = spinnerCategoria.getSelectedItem().toString();
inicio.putExtra("categoria", categoria);
startActivity(inicio);
finish();


} else {
// If sign in fails, display a message to the user.
Log.w("TagErrada", "createUserWithEmail:failure", task.getException());
Toast.makeText(CadastroPt2Activity.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();

}

// ...
}
});
}

这是我的 store.java,我在其中保存所有值。

public class Empresa {

private String uid;
private String nomeEmpresa;
private String nomeProprietario;
private String telefone;
private String email;
private String categoria;
private String descricao;
private String idUsuario;
private String senha;
private String tempo;
private String taxa;
private String cpf;
private String cnpj;
private Double precoEntrega;
private Localizacao localizacao;
private String urlImagem;


public Empresa() {
}

public void salvar(){
setUid(UsuarioFirebase.getUsuarioAtual().getUid());
DatabaseReference database = ConfiguracaoFirebase.getFirebaseDatabase();
DatabaseReference reference;
if(getCpf().equals("") || getCpf().equals(null)) {
setCpf(null);
reference = database.child("empresa").child(getUid());
}
else{

reference = database.child("empresa").child(getUid());
}

reference.setValue(this);

}

public String getUid() {
return uid;
}

public void setUid(String uid) {
this.uid = uid;
}

public String getCategoria() {
return categoria;
}

public void setCategoria(String categoria) {
this.categoria = categoria;
}

public Localizacao getLocalizacao() {
return localizacao;
}

public void setLocalizacao(Localizacao localizacao) {
this.localizacao = localizacao;
}


public String getDescricao() {
return descricao;
}

public void setDescricao(){
this.descricao =descricao;
}

public String getTaxa(){
return taxa;
}

public void setTaxa(){
this.taxa = taxa;
}


public String getTempo(){
return tempo;
}

public void setTempo(String tempo){
this.tempo = this.tempo;
}

public String getNomeEmpresa() {
return nomeEmpresa;
}

public void setNomeEmpresa(String nomeEmpresa) {
this.nomeEmpresa = nomeEmpresa;
}

public String getNomeProprietario() {
return nomeProprietario;
}

public void setNomeProprietario(String nomeProprietario) {
this.nomeProprietario = nomeProprietario;
}

public String getTelefone() {
return telefone;
}

public void setTelefone(String telefone) {
this.telefone = telefone;
}

public String getEmail() {
return email;
}

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

@Exclude
public String getSenha() {
return senha;
}

public void setSenha(String senha) {
this.senha = senha;
}

public String getCpf() {
return cpf;
}

public void setCpf(String cpf) {
this.cpf = cpf;
}

public String getCnpj() {
return cnpj;
}

public void setCnpj(String cnpj) {
this.cnpj = cnpj;
}



public String getUrlImagem() {
return urlImagem;
}

public String getIdUsuario() {
return idUsuario;
}

public void setIdUsuario(String idUsuario) {
this.idUsuario = idUsuario;
}

public Double getPrecoEntrega() {
return precoEntrega;
}

public void setPrecoEntrega(Double precoEntrega) {
this.precoEntrega = precoEntrega;
}

public void setUrlImagem(String urlImagem) {
this.urlImagem = urlImagem;
}

}

这是我的 json *已编辑

 "empresa" : {
"7tQGfB7utBWZBtJM2XvuxMH57Sl1" : {
"categoria" : "petshop",
"cnpj" : "",
"cpf" : "99999999999",
"email" : "mauro@gmail.com",
"localizacao" : {
"bairro" : "Jardim Planalto de Viracopos",
"cep" : "13056-016",
"cidade" : "Brazil",
"estado" : "São Paulo",
"latitude" : -22.989735,
"longitude" : -47.1418681,
"numero" : "27",
"rua" : "Rua Luzia Evangelista Eusébio"
},
"nomeEmpresa" : "mauro pet",
"nomeProprietario" : "mauro",
"pedidos" : {
"-Lq7o5ykWNyGBcab6WkZ" : {
"estado" : "Aguardando interação",
"idPedido" : "-Lq7o5ykWNyGBcab6WkZ",
"produto" : {
"descricao" : "teste",
"idProduto" : "-Lq7o5ykWNyGBcab6WkZ",
"idUsuario" : "7tQGfB7utBWZBtJM2XvuxMH57Sl1",
"nome" : "teste",
"preco" : 10
},
"quantidade" : 1
}
},
"telefone" : "+5519982674837",
"uid" : "7tQGfB7utBWZBtJM2XvuxMH57Sl1"
},

最佳答案

您收到以下错误:

Can't convert object of type java.lang.String to type com.example.ezcompras.model.Lojas

由于您正在使用以下引用:

DatabaseReference lojaRef = mDatabase
.child("empresa")
.child(idLoja) //idStore
.child("localizacao");

它指向一个节点,该节点代表一个 Localizacao 对象。因为您正在循环遍历它的子级,这些子级实际上是字符串,所以您会收到该错误。因此,如果您想获取单个 Localizacao 对象,则无需循环,只需像这样获取 Localizacao 对象即可:

ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Localizacao localizacao = dataSnapshot.getValue(Localizacao.class);
Log.d(TAG, localizacao.getCidade());
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
lojaRef.addListenerForSingleValueEvent(valueEventListener);

logcat 中的结果将是:

Brazil

关于java - 无法将 java.lang.String 类型的对象转换为 com.example.ezcompras.model.Lojas 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58206053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com