String para JSONObject saber se índice existe

this.token() é uma string do tipo {“erro” : “Valor do erro”}

Mas também, em caso de sucesso pode ser: do tipo {“token” : “Valor do token”}

Meu objetivo com o código abaixo e descobrir se o primeiro índice desse JSONObjeto a ser criado será " erro " ou " token " e estou tentando assim mas parece que está testando se o valor para o índice “erro” é nulo e não se o próprio índice erro existe ou não que é o meu objeto !

JSONObject token = new JSONObject(this.token());

    if (token.get("erro").equals(null))
        this.resposta.setText(token.getString("token"));
    else
        this.resposta.setText(token.getString("erro"));
    ```

Onde estou errando?

como o json está sendo impresso? (Finalizando com erro e finalizando com sucesso)

Como mencionado na pergunta:

{"erro" : "Valor do erro"}

e

{"token" : "Valor do token"}

Tenta assim:

if (token.isNull("erro")) {
    // ...
}

FONTE: https://docs.oracle.com/javaee/7/api/javax/json/JsonObject.html#isNull-java.lang.String-

é vc q ta fazendo esse json?

Se sim, vc pode fazer deixar mais profissional:

    JSONObject jsonResultado = new JSONObject();
    jsonResultado.put("error", "[400] Poxa, que triste... Não conseguimos realizar a operação. Tente novamente");

    JSONArray jsonArray = new JSONArray();
    jsonArray.put(jsonResultado);

    JSONObject resultadoFinal = new JSONObject();
    resultadoFinal.put("MeuJson", jsonArray);

O resultado será esse:

{"MeuJson":[{"error":"[400] Poxa, que triste... Não conseguimos realizar a operação. Tente novamente"}]}

E você irá fazer a leitura assim:

    JSONObject objJson = new JSONObject("{\"MeuJson\":[{\"token\":\"[400] Poxa, que triste... Não conseguimos realizar a operação. Tente novamente\"}]}");
    JSONArray resultado = objJson.getJSONArray("MeuJson");
    
    System.out.println(resultado.get(0));
    if(resultado.get(0).toString().contains("token")){
        System.out.println("sucesso");
    } else {
        System.out.println("erro");
    }

O resultado será esse:

{"token":"[400] Poxa, que triste... Não conseguimos realizar a operação. Tente novamente"}
sucesso

Se não, pode seguir a dica do Lucas!!

Deu certo assim:

token.has("erro")

do teu jeito:

if (token.isNull("erro")) {

travou tudo!

Mas obrigado por tentar

1 curtida

Vou dar uma olhada com calma nessa tua forma pois gostei.
Como ainda estou aprendendo, vai ser ótimo!

Me esbarrei em uma situação aqui:

Para que a conexão com a internet funcione, está sendo necessário esse bloco dento do main:

if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
            .permitAll()
            .build();
    StrictMode.setThreadPolicy(policy);
}

Se eu retiro, a conexão.

Tem algum recurso quando a esse código na main?

Acabei usando AssyncTask mesmo!