现在我们越来越多的会从其他方面直接接受数据,不会自己在写。今天就讲一下如何在APIStore上获取实时新闻。
为了方便,我们先建三个Util,分别是;FileUtil,UrlUtil,HttpUtil‘
程序在下面:FileUtil:
import android.content.Context;
import android.os.Environment;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileUitlity {
private static String ROOT_CACHE;
private static FileUitlity instance = null;
private FileUitlity() {
}
public static FileUitlity getInstance(Context context,String root_dir) {
if (instance == null) {
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
ROOT_CACHE = (Environment.getExternalStorageDirectory() + “/”
+ root_dir + “/”);
} else {
ROOT_CACHE = (context.getFilesDir().getAbsolutePath() + “/”+root_dir+”/”);
}
File dir = new File(ROOT_CACHE);
if (!dir.exists()) {
dir.mkdirs();
}
instance = new FileUitlity();
}
return instance;
}
public File makeDir(String dir) {
File fileDir = new File(ROOT_CACHE + dir);
if (fileDir.exists()) {
return fileDir;
} else {
fileDir.mkdirs();
return fileDir;
}
}
public static String saveFileToSdcard(String fileName,String content){
String state = Environment.getExternalStorageState();
if(!state.equals(Environment.MEDIA_MOUNTED)){
return “SD卡未就绪”;
}
File root = Environment.getExternalStorageDirectory();
FileOutputStream fos = null;
try {
fos = new FileOutputStream(root+”/”+fileName);
fos.write(content.getBytes());
return “ok”;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(fos!=null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return “”;
}
}
HttpUtil的程序:
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 HttpUtil {
public static String HttpGet(String uri){
HttpURLConnection con = null;
BufferedReader reader = null;
InputStream is = null;
StringBuilder sbd = new StringBuilder();
try {
URL url = new URL(uri);
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) {
sbd.append(strRead);
sbd.append("\r\n");
}
return sbd.toString();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(reader!=null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return "";
}
}
UrlUtil的程序:
public class UrlUtil {
//获取 频道的网络接口
public static String channelUrl = “http://apis.baidu.com/showapi_open_bus/channel_news/channel_news“;
/*获取 频道对应新闻的网络接口
get 请求参数:
* channelId : 新闻频道id,必须精确匹配
channelName :新闻频道名称,可模糊匹配
title :新闻标题,模糊匹配
page :页数,默认1。每页最多20条记
* needContent : 是否需要返回正文,1为需要
* needHtml :是否需要返回正文的html格式,1为需要
*/
public static String newsUrl = “http://apis.baidu.com/showapi_open_bus/channel_news/search_news“;
}
最后在HttpJson上写主程序:
在主程序上写时,会调用前面写的三个Util;方法是:
因为我们要做的是从网络上拿到数据并显示在手机上;所以要用
SimpleAdapter,这里不用再去专门写一个adapter,直接简单的写就好。程序如下:
sa=new SimpleAdapter(this,channelList,android.R.layout.simple_spinner_item
,new String[]{“name”},new int[]{android.R.id.text1});
还要用到List;
值得注意的是:网络必须用异步任务类;他放在适配器后面用,否则就不会得到数据。’
HttpJson的程序为:
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.jerehedu.jereduch10.util.HttpUtil;
import com.example.jerehedu.jereduch10.util.UrlUtil;
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 HttpJsonActivity extends AppCompatActivity {
private Spinner channel;
//用SimpleAdapter是需要用List