我们要做的是从网络获取数据,在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