继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

(课程学习)Android必学-异步加载 —— 自己写的一些注释(MainActivity)

煎蛋的少年
关注TA
已关注
手记 4
粉丝 5
获赞 31

最有意思的事情,是我和你眼中的世界是这般的不一样。
希望能够和你多交流,认识到我认识不到的世界。

public class MainActivity extends Activity {

    private ListView mlistView;
    private static String URL = "http://www.imooc.com/api/teacher?type=4&num=30";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
        new NewsAsyncTask().execute(URL);
    }

    private void init() {
        mlistView = (ListView) findViewById(R.id.mlistView);
    }

//    Return Style is List<NewBean>

    /**
     *      通过private List<NewBean> getJsonData (String url)方法,
     *      我们将url所对应的Json格式对象,转化为我们所封装的newBean对象
     * @param url
     * @return
     */
    private List<NewBean> getJsonData (String url){
        List<NewBean> newBeanlist = new ArrayList<>();
//        我们要获取json数据中的String类型数据,所以要创建一个方法来获取Json数据。
        try {
            String jsonString = readStream(new URL(url).openStream());
//            Log.d("xys",jsonString);

/**
 *                 ------------->读取Json格式数据的工作<--------------
 *                 
 *      1、新建一个JSONObject 对象,给这个对象传入通过readStream 方法读取到的Json信息
 *      2、观察网页上Json数据的显示,先对Json数据中的JsonArray进行读取
 *          新建一个JSONArray 对象,通过JSONObject的getJSONArray()的方法,传入JSON信息中的标记符
 *      3、成功读取data的数据后,将data数据中我们需要的数据载入到NewBean类的对象中加以利用
 *          根据JSON数据中的特征,通过一个for循环,对data内多个数据进行读取。
 *      4、for循环中,通过jsonArray.getJSONObject(i)的方法读取对应的Array中的对象。
 *          这里可以看出,Json中的object和array关系,大概就是View和ViewGroup的关系,
 *          两者互相包裹,然后形成一个较为合理的层次。
 *                     》》》》》》》读取Json格式数据的工作《《《《《《《《《
 */
            NewBean newBean ;
            JSONObject jsonObject;
            jsonObject = new JSONObject(jsonString);
            JSONArray jsonArray = jsonObject.getJSONArray("data");
            for (int i = 0; i <jsonArray.length() ; i++) {
                jsonObject = jsonArray.getJSONObject(i);
                newBean =new NewBean();
                newBean.newsIconUrl = jsonObject.getString("picSmall");
                newBean.newsTitle = jsonObject.getString("name");
                newBean.newsContent = jsonObject.getString("description");
                newBeanlist.add(newBean);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return newBeanlist;
    }
    /**
     *               ------------->读取Json格式数据的工作<--------------
      */

//     We need some String params to set into list from rsetJson DATA.So the method need to return a String Style .

    /**
     *      ------------->通过 InputStream 数据流 解析网页返回的数据<--------------
     */
    private String readStream(InputStream is ){
//        InputStream is the assess by Json ,so the method need to input the DATA InputStream Style for dealing .
        InputStreamReader isr ;
        String result = "";
//         We need read the message line by line from Web by Json.
        try {
            String line = "";
//            通过uft-8 将 is 的 字节流格式 转化成 字符流格式
            isr = new InputStreamReader(is,"utf-8");
//            通过BufferedReader将字符流以buffer的形式读取出来
            BufferedReader br = new BufferedReader(isr);
//            Using while read message line by line .
            while ((line = br.readLine())!=null){
//                将每行读取的信息拼接到字符串result中
                result += line ;
//                这样就完成了整个Json信息的读取
            }
        } catch (UnsupportedEncodingException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        return result;
    }
    /**
     *      ------------->通过 InputStream 数据流 解析网页返回的数据<--------------
     */

    /**
     *      ------------->实现了网络的异步访问<--------------
     *       在doInBackground 方法中,String... params 是获取的信息,也是处理的信息。
     *       在获取到Data之后,需要同onPostExecute 的方法,将我们封装的NewBean对象设置给ListView,给listView设置适配器
     */
    class NewsAsyncTask extends AsyncTask<String ,Void ,List<NewBean>> {

        @Override
//      在doInBackground 方法中,String... params 是获取的信息,也是处理的信息。
        protected List<NewBean> doInBackground(String... params) {

            return getJsonData(params[0]);
        }
//      在获取到Data之后,需要同onPostExecute 的方法,将我们封装的NewBean对象设置给ListView,给listv设置适配器

        @Override
        protected void onPostExecute(List<NewBean> newBean) {
            super.onPostExecute(newBean);
            NewsAdapter adapter = new NewsAdapter(MainActivity.this,newBean);
            mlistView.setAdapter(adapter);
        }
    }
}
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP