[英]Extract json data from an api array or matrix java android studio
我无法从此 json 中提取数据。 我相信这是因为它是一个数组。 我读过它,但我没有找到任何关于这个案例的具体内容。
每次关闭 {} 时,我只需要单独获取这些值。
例如:结果 [0].getLoterias();
== 瞬间
连接正常,我只是无法提取数据。
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;
httpsservic2 新:
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 更改返回但是,我迷路了
看来您只想要响应中的 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;
如果您希望将响应解析为列表。
另一种可能性是将数据解析为数组:
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 并发实用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.