Извлечение json данных из массива API или матрицы java android studio - PullRequest
0 голосов
/ 02 мая 2020

Я не могу извлечь данные из этого json. Я считаю, что это потому, что это массив. Я читал об этом, но не нашел ничего конкретного c для этого случая.

Мне просто нужно принимать значения индивидуально каждый раз, когда я закрываю {}.

Например: результат [0] .getLoterias ();

== INSTANTANEA

Соединение устанавливается нормально, я просто не могу извлечь данные.

httpservice2. java

package br.com.matheuscastiglioni.blog.requisicao_http.service;

import android.os.AsyncTask;

import com.google.gson.Gson;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Scanner;

import br.com.matheuscastiglioni.blog.requisicao_http.model.CEP2;

public class HttpService2 extends AsyncTask<Void, Void, CEP2> {


    private final String cep;
    private final String token;

    public HttpService2(String cep, String token) {
        this.cep = token;
        this.token = cep;

    }

    @Override
    protected CEP2 doInBackground(Void... voids) {
        StringBuilder resposta = new StringBuilder();



            try {
                URL url = new URL( "A" + this.cep + "&token=" + this.token);

                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("GET");
                connection.setRequestProperty("Content-type", "application/json");
                connection.setRequestProperty("Accept", "application/json");
                connection.setDoOutput(true);
                connection.setConnectTimeout(5000);
                connection.connect();

                Scanner scanner = new Scanner(url.openStream());
                while (scanner.hasNext()) {
                    resposta.append(scanner.next());
                }



            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }



            return new Gson().fromJson(resposta.toString(), CEP2.class);
    }



}

Main3Activity. java:

package br.com.matheuscastiglioni.blog.requisicao_http;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.util.concurrent.ExecutionException;

import br.com.matheuscastiglioni.blog.requisicao_http.model.CEP2;
import br.com.matheuscastiglioni.blog.requisicao_http.service.HttpService2;

public class Main3Activity extends AppCompatActivity {

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


        final TextView resposta = findViewById(R.id.etMain_resposta2);
        final TextView cep = findViewById(R.id.etMain_resposta3);
        final TextView token = findViewById(R.id.etMain_resposta4);
        Bundle extras = getIntent().getExtras();
        String respostatoken = extras.getString("token");
        String respostaid = extras.getString("id");

        cep.setText(respostaid);
        token.setText(respostatoken);
//alert(cep.getText().toString() + token.getText().toString());
          try {
              CEP2 retorno = new HttpService2(cep.getText().toString(), token.getText().toString()).execute().get();
              String loteria = retorno.getIdloteria();
            resposta.setText(loteria);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

    }

    private void alert(String s) {
        Toast.makeText(this,s,Toast.LENGTH_LONG).show();
    }
}

CEP2. java:

package br.com.matheuscastiglioni.blog.requisicao_http.model;



public class CEP2 {


    private String idloteria;

    public String getIdloteria() {
        return idloteria;
    }

    public void setIdloteria(String idloteria) {
        this.idloteria = idloteria;
    }



}

в настоящее время:

Я изменил

return new Gson().fromJson(resposta.toString(), CEP2.class);

за

Type cep2ListType = new TypeToken<ArrayList<CEP2>>(){}.getType();
List<CEP2> cep2List = new Gson().fromJson(resposta.toString(), cep2ListType);
return cep2List;

httpservic2 new:

package br.com.matheuscastiglioni.blog.requisicao_http.service;

import android.os.AsyncTask;

import com.google.gson.Gson;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Scanner;

import br.com.matheuscastiglioni.blog.requisicao_http.model.CEP2;

public class HttpService2 extends AsyncTask<Void, Void, CEP2> {


    private final String cep;
    private final String token;

    public HttpService2(String cep, String token) {
        this.cep = token;
        this.token = cep;

    }

    @Override
    protected CEP2 doInBackground(Void... voids) {
        StringBuilder resposta = new StringBuilder();



            try {
                URL url = new URL( "A" + this.cep + "&token=" + this.token);

                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("GET");
                connection.setRequestProperty("Content-type", "application/json");
                connection.setRequestProperty("Accept", "application/json");
                connection.setDoOutput(true);
                connection.setConnectTimeout(5000);
                connection.connect();

                Scanner scanner = new Scanner(url.openStream());
                while (scanner.hasNext()) {
                    resposta.append(scanner.next());
                }



            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }



               Type cep2ListType = new TypeToken<ArrayList<CEP2>>(){}.getType();
        List<CEP2> cep2List = new Gson().fromJson(resposta.toString(), cep2ListType);
        return cep2List;
    }



}

Мне нужно изменить возвращение из doinbackground Однако я потерян

1 Ответ

1 голос
/ 02 мая 2020

Кажется, вы хотите только идлотерии от ответа, который должен быть в порядке. Но, как вы говорите, это массив, и он должен быть проанализирован как массив или список.

:

return new Gson().fromJson(resposta.toString(), CEP2.class);

Должно быть

Type cep2ListType = new TypeToken<ArrayList<CEP2>>(){}.getType();
List<CEP2> cep2List = new Gson().fromJson(resposta.toString(), cep2ListType);
return cep2List;

Если вы хотите ответ должен быть проанализирован как список.

Другая возможность состоит в том, чтобы получить данные, проанализированные как массив:

CEP2[] cep2Array = new Gson().fromJson(resposta.toString(), CEP2[].class);
return cep2Array;

, и вам нужно будет изменить возвращение doInBackground в соответствии с тип ответа, который вы выбираете.

Позволяет вернуть список. В этом случае измените AsyncTask<Void, Void, CEP2> на AsyncTask<Void, Void, List<CEP2>>, а также protected CEP2 doInBackground на protected List<CEP2> doInBackground. Возвращенный список будет получен в параметре onPostExecute onPostExecute(List<CEP2> cep2List). И в этом onPostExecute вы можете сохранить список, распечатать его или сделать все, что вы хотите сделать с полученными данными.

Но имейте в виду, что AsyncTask устарела на уровне API R. Это вместо этого рекомендуется использовать стандартные java .util.concurrent или Kotlin утилиты параллелизма.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...