Java 从URL获取JSON数据并保存到变量以显示
我在获取json数据方面遇到了问题,我一直在关注youtube或者一些关于从url获取json数据的教程。我希望将获取数据写入字符串数据,并在MainActivity上显示到TextView,如“onPostExecute()”。我想,我的代码有一些问题,你能帮我检查一下代码吗Java 从URL获取JSON数据并保存到变量以显示,java,android,json,Java,Android,Json,我在获取json数据方面遇到了问题,我一直在关注youtube或者一些关于从url获取json数据的教程。我希望将获取数据写入字符串数据,并在MainActivity上显示到TextView,如“onPostExecute()”。我想,我的代码有一些问题,你能帮我检查一下代码吗 { "zone":"SGR01", "start":"14-01-2020", "end":"14-01-2020", "locations":[ "Gombak","Hulu Selango
{ "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);
}
{“区域”:“SGR01”,
“开始”:“14-01-2020”,
“结束”:“14-01-2020”,
“地点”:[
“贡巴克”、“雪兰莪胡鲁”、“拉旺”、“胡鲁兰加特”、“雪邦”、“佩塔林”、“沙阿阿拉姆”],
“祈祷时间”:{
“日期”:“14-01-2020”,
“邮戳”:1578931200,
“imsak”:“上午6:02”,
“苏布”:“上午6:12”,
“赛鲁克”:“上午7:22”,
“zohor”:“下午1:25”,
“asar”:“下午4:47”,
“马格里布”:“下午7:22”,
“isyak”:“晚上8:36”
}
}
//---------
公共类fetchData扩展异步任务{
字符串数据=”;
@凌驾
受保护的空位背景(空位…空位){
试一试{
URL=新URL(“URL”);
HttpURLConnection HttpURLConnection=(HttpURLConnection)url.openConnection();
InputStream InputStream=httpURLConnection.getInputStream();
BufferedReader BufferedReader=新的BufferedReader(新的InputStreamReader(inputStream));
字符串行=”;
while(行!=null){
line=bufferedReader.readLine();
数据=数据+行;
}
}捕获(格式错误){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
Log.d(“显示数据--”,数据);
MainActivity.data.setText(数据);
}
我发现了一个错误,我修改了如下代码。
并使用StringBuffer来提高性能
StringBuffer sb = new StringBuffer();
String line = "";
while(( line = bufferedReader.readLine()) != null )
{
sb.append(line);
}
data = sb.toString();
我发现了一个错误,并修改了如下代码。 并使用StringBuffer来提高性能
StringBuffer sb = new StringBuffer();
String line = "";
while(( line = bufferedReader.readLine()) != null )
{
sb.append(line);
}
data = sb.toString();
将类定义为
FetchData extends AsyncTask
。不要在该类中声明data
变量。读取String doInBackground(String…voids)
方法中的内容,并返回它,而不是null
。然后在void onPostExecute(String data)中
method立即打印它。将类定义为FetchData extends AsyncTask
。不要在该类中声明data
变量。读取String doInBackground(String…voids)
方法中的内容,并返回它,而不是null
。然后在void onPostExecute(String data)中
method在您现在进行打印时将其打印出来。