文章目录

  • 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

Android  解析服务端Json数据_java

3、JSON 解析包的安装下载
  1. Json 库文件 下载包

    2)使用方法:
    (1)复制到 studio libs 文件夹

Android  解析服务端Json数据_Json _02

(2)右键选中点击 以库文件添加

等待编译通过就可以在代码里调用Json 的一些类了。

Android  解析服务端Json数据_数据_03

4、代码结构

Android  解析服务端Json数据_数据_04

(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数据_Json _05

文件参考:
android 解析网络数据(JSON)

Java获取并解析服务器端的JSON数据包

《Android 典型技术模块开发详解》

本人郑重声明,本博客所编文章、图片版权归权利人持有,本博只做学习交流分享所用,不做任何商业用途。访问者可將本博提供的內容或服务用于个人学习、研究或欣赏,不得用于商业使用。同時,访问者应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人的合法权利;如果用于商业用途,须征得相关权利人的书面授权。若文章、图片的原作者不愿意在此展示內容,请及时通知在下,將及时予以刪除。