文章目录
- 1、简介
- 2、访问的网站
- 3、JSON 解析包的安装下载
- 4、代码结构
- 5、AndroidManifest.xml 添加网络权限
- 6、MainActivity 文件 具体实现
- 7、log打印
1、简介
通过网络访问 ,获取到服务端上Json 数据,然后对Json 数据进行解析,得到需要的数据。
2、访问的网站
JSON API免费测试的网站
http://www.bejson.com/knownjson/webInterface/
1)我们测试网址
http://api.map.baidu.com/telematics/v3/weather?location=上海&output=json&ak=5slgyqGDENN7Sy7pw29IUvrZ
3、JSON 解析包的安装下载
- Json 库文件 下载包
2)使用方法:
(1)复制到 studio libs 文件夹
(2)右键选中点击 以库文件添加
等待编译通过就可以在代码里调用Json 的一些类了。
4、代码结构
(1) 需要添加网络访问权限
(2) 具体实现 数据访问
5、AndroidManifest.xml 添加网络权限
<uses-permission android:name="android.permission.INTERNET" />
6、MainActivity 文件 具体实现
package com.example.ubuntu.myurldata;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
private String TAG = "MainActivity:";
private String urlWeatherString = "http://api.map.baidu.com/telematics/v3/weather?location=%E4%B8%8A%E6%B5%B7&output=json&ak=5slgyqGDENN7Sy7pw29IUvrZ"; //天气服务器地址
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建一个线程 网络数据的访问 不能再主线程里面访问
new Thread(new Runnable() {
@Override
public void run() {
getWeatherJsonData(getURLData(urlWeatherString)); //解析Json 数据
}
}).start();
}
//通过 URL 响应获取字符串
/*
* 将网络上的JSon 数据 通过 HttpURl 下载到本地
* 转化成string 保存
* */
public String getURLData(String urlString){
HttpURLConnection httpURLConnection = null; //连接对象
InputStream inputStream = null;
String urlData = ""; //获得的数据
Log.i(TAG,"准备获取字网络上的 节气数据");
try {
URL url = new URL(urlString); //创建 URL 对象
httpURLConnection = (HttpURLConnection) url.openConnection(); //使用url打开一个连接
httpURLConnection.setDoInput(true); //允许输入流
httpURLConnection.setDoOutput(true); //允许输出流
httpURLConnection.setUseCaches(false); //不使用缓存
httpURLConnection.setRequestMethod("GET");//使用Post 请求
inputStream = httpURLConnection.getInputStream(); //获取流
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader); //为输出创建 bufferedReader
String inputLine = "";
while (((inputLine = bufferedReader.readLine()) != null)) { //使用循环获取读取的数据
urlData += inputLine + "\n";
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if ( inputStream != null) {
try {
inputStream.close(); //关闭输入流
} catch (IOException e) {
e.printStackTrace();
}
}
if (httpURLConnection != null){
httpURLConnection.disconnect();//关闭 http 连接
}
}
Log.i(TAG,"获取字网络上的 节气数据 为: " + urlData);
return urlData;
}
// 获取 天气的 json 数据
/*
* 将网络下载的JSOn 数据,通过 JSon 转换层我们需要的 数据
* */
private void getWeatherJsonData(String urlData) {
JSONObject json = JSONObject.fromObject(urlData);//如传过来的值为string类型则转成json类型
String status = json.getString("status");
String message = json.getString("message");
Log.i(TAG, "\n" + "status :" + status + "\n"
+ " message: " + message);
}
}
7、log打印
文件参考:
android 解析网络数据(JSON)
Java获取并解析服务器端的JSON数据包
《Android 典型技术模块开发详解》
本人郑重声明,本博客所编文章、图片版权归权利人持有,本博只做学习交流分享所用,不做任何商业用途。访问者可將本博提供的內容或服务用于个人学习、研究或欣赏,不得用于商业使用。同時,访问者应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人的合法权利;如果用于商业用途,须征得相关权利人的书面授权。若文章、图片的原作者不愿意在此展示內容,请及时通知在下,將及时予以刪除。