从网络获取数据,解析后输出。

我们要做的是从网络获取数据,在Activity中显示出来。

首先我们要导入gson包,它的作用是把Json字符串转换成相等的Java对象。把从网络获取数据和保存数据的方法写成类,方便以后调用。

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;

/** * Created by Administrator on 2016/8/17. */public class HttpUtil  {    public static  String HttpGet(String params){        {            HttpURLConnection con=null;       //HttpURLConnection获取数据的方法
            InputStream is = null;            //输入流            BufferedReader reader=null;       //包装字符流到缓存里,优化程序            StringBuffer sbf=new StringBuffer(); //字符串变量,它的对象是可以扩充和修改的。            try {                URL url=new URL(params);           //params为网址
                con  = (HttpURLConnection)url.openConnection();                con.setConnectTimeout(5 * 1000);                con.setReadTimeout(5*1000);                con.setRequestProperty("apiKey", "5b46143955a4b1ff1b470a94315625cd");                con.connect();                if(con.getResponseCode()==200){                    is =  con.getInputStream();                    reader=new BufferedReader(new InputStreamReader(is));                    String strRead=null;                    while((strRead=reader.readLine())!=null){                        sbf.append(strRead);                        sbf.append("\r\n");                    }                    reader.close();                    return sbf.toString();                }            } catch (MalformedURLException e) {                e.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            }finally {                if(is!= null){                    try {                        is.close();                    } catch (IOException e) {                        e.printStackTrace();                    }                }                if(con!=null){                    con.disconnect();                }            }            return "";

        }

    }}
public class UrlUtil {    //获取频道的网络接口    public static String channelUrl="http://apis.baidu.com/showapi_open_bus/channel_news/channel_news";    /* 获取频道对应新闻的网络接口    /  get请求参数       channelId : 新闻频道ID ,必须匹配精确       channelName : 新闻频道名称,可模糊匹配       title   : 新闻标题,可模糊匹配       page :    :页数       needContent :是否需要返回正文 1 需要       needHtml : 是否需要返回html格式的正文 1 需要      */    public static String newsUrl="http://apis.baidu.com/showapi_open_bus/channel_news/search_news";}
//Activity中的代码
import android.os.AsyncTask;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.AdapterView;import android.widget.SimpleAdapter;import android.widget.Spinner;import android.widget.TextView;import android.widget.Toast;

import com.example.administrator.jreduch07.R;

import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;

import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;

public class APIActivity extends AppCompatActivity {    private TextView textView;                    //用于显示数据    private Spinner channel;                       //下拉列表    private SimpleAdapter sa;                   //适配器    private List<Map<String ,String>> channelList;    //范型存放的是Map,Map中存放的是两个String类型的数据

    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_api);        textView= (TextView) findViewById(R.id.textView);        channel= (Spinner) findViewById(R.id.channel);        channelList=new ArrayList<>();        sa=new SimpleAdapter(this,channelList,                android.R.layout.simple_spinner_item,                new String[]{"name"},new int[] {android.R.id.text1});        channel.setAdapter(sa);        new GetChanel().execute();        channel.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {            @Override            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {                Map<String,String> map= channelList.get(position);                  String channelName=  map.get("name");                  String channelId=map.get(channelName);                  String url=UrlUtil.newsUrl                          +"?channelId="                          +channelId+"&channelName="+channelName;                new GetNews().execute(url);            }

            @Override            public void onNothingSelected(AdapterView<?> parent) {

            }        });

    }

    //获取频道    public class  GetChanel extends AsyncTask<Void,Void,String>{        @Override        protected String doInBackground(Void... params) {            return HttpUtil.HttpGet(UrlUtil.channelUrl);        }        @Override        protected void onPostExecute(String s) {            super.onPostExecute(s);            if(s.equals("")){                Toast.makeText(getBaseContext(),"没有数据",Toast.LENGTH_SHORT).show();            }            try {                JSONObject obj=new JSONObject(s);                JSONObject body=obj.getJSONObject("showapi_res_body");                JSONArray ja=body.getJSONArray("channelList");                for(int i=0;i<ja.length();i++){                    JSONObject channelObj= (JSONObject) ja.get(i);                    String id=channelObj.getString("channelId");                    String name=channelObj.getString("name");                    Map map=new HashMap();                    map.put("name",name);                    map.put(name,id);                    channelList.add(map);                }                sa.notifyDataSetChanged();

            } catch (JSONException e) {                e.printStackTrace();            }        }    }

    //获取新闻    public class GetNews extends AsyncTask<String,Void,String>{        @Override        protected String doInBackground(String... params) {             return HttpUtil.HttpGet(params[0]);        }

        @Override        protected void onPostExecute(String s) {            super.onPostExecute(s);            if(s.equals("")){                textView.setText("没有");            }                textView.setText(s);        }    }

}
 
时间: 2024-08-05 11:18:38

从网络获取数据,解析后输出。的相关文章

Android网络之数据解析----使用Google Gson解析Json数据

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4063452.html 联系方式:[email protected] [正文] 文章回顾: Android网络之数据解析----SAX方式解析XML数据 一.Json数据的介绍                                                             

网络获取数据的Xml的Pull解析

网络获取的XML的Pull解析 <?xml version="1.0" encoding="utf-8" ?> - <students> - <student xuehao="1233">  <name>张三</name>   <address>北京市昌平区</address> - <call>  <phone>010-37464567&l

iOSDay38网络之数据解析

1. 解析的基本的概念 解析:从事先规定好的格式中提取数据 解析前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JOSN解析 2. XML数据结构 1> 概述 XML:Extensible markup language(可扩展标记语言),主流数据格式之一,可以用来存储和传输数据. 2> XML数据格式的功能 数据交换 内容管理 用作配置文件 3> XML数据格式的语法 声明 节点使用一对标签表示:起始和结束标签. 根节点

从网络获取数据(1)从newThread到AsyncTask在到IntentService

概述 安卓不允许在UI线程中发送网络请求,因此必须新启动一个线程. 如果我们在活动中new Thread,这样就会有问题,这个线程会随着活动的生命周期结束而结束,如果活动的命比这个线程短,活动死掉了,线程还没有进行完,然后也不幸 挂了,这样,获取数据的任务就相当于是失败了,这肯定是不可以的啊.所以我们需要使用一个后台进程,比如AsyncTask,但是这个AsyncTask也要能快速完成(最多几秒), 不过他也有的一个问题就是,如果用户选择屏幕,后台的那个AsyncTask没有执行完,又会新建一个

iOS开发——网络篇&amp;数据解析

数据解析 关于iOS开发的中数据解析的方法有两种JSON和XML,这里只做简单的介绍,会使用就可以了. JSON—— 关于JSON的解析经过很多爱好者的分析使用相同自带的还是最好的,不管是从使用的容易度还是性能方面 NSJSONSerialization 1 -(void)start 2 { 3 4 NSString* path = [[NSBundle mainBundle] pathForResource:@"Notes" ofType:@"json"]; 5

网络之数据解析

(一) 解析: 从事先规定好的格式中提取数据; 前提:提前约定好格式,数据提供方按照格式提供数据,数据获取方则按照格式获取数据. 常见的解析:XML JSON. 前四个页面.当点击页面时触发效果.所以代码写在touchsBegan中 //第五个页面(viewController) : (二)XML 数据结构 (主要用于天气预报) XML: Extensible Markup language (可扩展标记语言);可用来存储和传输数据; 功能:数据交换 ,, 内容管理 ,, 用作配置文件 语法:

iOS进阶学习-网络之数据解析

一.解析的基本概念 所谓“解析”:从事先规定好的格式中提取数据. 解析的前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据. iOS开发常见的解析:XML解析.JSON解析. 二.XML数据结构 XML:Extensible Markup language(可扩展标记语言),主流数据格式之一,可以用来存储和传输数据. XML数据格式的功能:数据交换,内容管理,用作配置文件. XML数据结构的语法:1)声明:2)节点使用一堆标签表示:3)根节点是起始节点,只有一个,节点

iOS中从网络获取数据的几种方法的比较

IOS中获取网络数据一般有三种:1.NSURLCondition(已过时) 2.NSURLSession  3.三方库AFNetWorking NSURLSession 是苹果对NSULRCondition的替代品,NSURLSession比NSURLCondition多了 1.可配置的数据信息NSURLSessionConfiguration,NSURLSessionConfiguration使你可以设置你要请求的数据,通常的设置如缓存,也可以使用默认的配置信息defaultCongurati

从网络获取数据(2)使用SyncAdapter

之前我们讲的都是及时传输数据,这些随机的数据传输不利于管理,影响内存或者电池的使用,现在安卓提供了一个sync adapter框架, 帮助管理和自动进行数据传输,并且在不同app间合作进行同步.还有如下特色:  Plug-in architecture 允许我们添加数据传输的代码到系统以可调用组件的形式  Automated execution 允许我们基于一些标准的自动数据传输,包括数据改变.逝去时间或者一天中的时间(including data changes, elapsed time