Не удается преобразовать объект типа java.lang.String в тип com.example.ezcompras.model.Lojas - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь получить дочерние значения, я уже получаю некоторые значения в других действиях, и у меня не было проблем. Теперь я создаю нового слушателя в моем новом действии, и я не получаю значения. Я могу найти, но не могу перейти к своему объекту;Я добавлю код, чтобы попытаться объяснить, что я говорю.

Мне нужно это красным цветом (отредактировано) (https://cdn.discordapp.com/attachments/375765058992603136/630091075226173479/unknown.png)

Ошибка

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

Я сохраняю значения на объекте (это мой регистр)

 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 (это моя активность в реестре)

 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;

открытый класс Localizacao {

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 (это мой регистр актививы)

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"
},

1 Ответ

0 голосов
/ 04 октября 2019

Вы получаете следующую ошибку:

Невозможно преобразовать объект типа java.lang.String в тип 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...