关于在APIStore中获取数据

现在我们越来越多的会从其他方面直接接受数据,不会自己在写。今天就讲一下如何在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
private SimpleAdapter sa;
private List

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值