【发布时间】:2020-05-03 10:55:37
【问题描述】:
我在获取 json 数据时遇到问题,我已经关注了 youtube 或一些关于从 url 获取 json 数据的教程。我想将获取数据写入字符串数据并显示到 MainActivity 的 TextView,如“onPostExecute()”。我想,我的代码有问题,你能帮忙检查一下我的代码吗?
{ "zone":"SGR01",
"start":"14-01-2020",
"end":"14-01-2020",
"locations":[
"Gombak","Hulu Selangor","Rawang","Hulu Langat","Sepang","Petaling","Shah Alam"],
"prayer_times":{
"date":"14-01-2020",
"datestamp":1578931200,
"imsak":"6:02 am",
"subuh":"6:12 am",
"syuruk":"7:22 am",
"zohor":"1:25 pm",
"asar":"4:47 pm",
"maghrib":"7:22 pm",
"isyak":"8:36 pm"
}
}
//---------
public class fetchData extends AsyncTask<Void, Void, Void> {
String data ="";
@Override
protected Void doInBackground(Void... voids) {
try {
URL url = new URL("url");
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while(line != null){
line = bufferedReader.readLine();
data = data + line;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
Log.d("DisplayData--",data);
MainActivity.data.setText(data);
}
【问题讨论】:
-
将您的班级定义为
FetchData extends AsyncTask<String, Void, String>。不要在该类中声明data变量。读取String doInBackground(String... voids)方法中的内容并返回它而不是null。之后在void onPostExecute(String data)方法中打印它,就像你现在做的那样。