MainActivity.java 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package com.example.myapplication;
  2. import android.content.Intent;
  3. import android.os.AsyncTask;
  4. import android.os.Bundle;
  5. import android.support.v7.app.AppCompatActivity;
  6. import android.view.View;
  7. import android.widget.AdapterView;
  8. import android.widget.ListView;
  9. import android.widget.TextView;
  10. import org.json.JSONArray;
  11. import org.json.JSONException;
  12. import org.json.JSONObject;
  13. import java.io.*;
  14. import java.net.URL;
  15. import java.util.ArrayList;
  16. import java.util.List;
  17. public class MainActivity extends AppCompatActivity {
  18. private ListView mListView;
  19. private static String URL = "http://news.6liu.top/news";
  20. @Override
  21. protected void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. //默认加载的页面
  24. setContentView(R.layout.activity_main);
  25. mListView = (ListView) findViewById(R.id.new_main);
  26. //点击事件
  27. mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  28. @Override
  29. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  30. //获得保存网址的隐藏对象
  31. TextView content= (TextView) view.findViewById(R.id.new_content);
  32. //传递的activity
  33. Intent intent = new Intent(MainActivity.this, NewsActivity.class);
  34. //保存参数
  35. intent.putExtra("content_url", content.getText().toString());
  36. //向下传值
  37. startActivity(intent);
  38. }
  39. });
  40. //发起URL请求
  41. new NewsAsyncTask().execute(URL);
  42. }
  43. /**
  44. * 实现网络的异步访问
  45. */
  46. class NewsAsyncTask extends AsyncTask<String, Void, List<NewBean>>{
  47. @Override
  48. protected List<NewBean> doInBackground(String... strings) {
  49. return getJsonData(strings[0]);
  50. }
  51. @Override
  52. protected void onPostExecute(List<NewBean> newBeans) {
  53. super.onPostExecute(newBeans);
  54. NewsAdapter adapter = new NewsAdapter(MainActivity.this, newBeans, mListView);
  55. mListView.setAdapter(adapter);
  56. }
  57. }
  58. /**
  59. * 将获取到的json数据转化为NewBean对象
  60. * @param url
  61. * @return
  62. */
  63. private List<NewBean> getJsonData(String url) {
  64. List<NewBean> newsBeanList = new ArrayList<>();
  65. try {
  66. String jsonString = readStream(new URL(url).openStream());
  67. NewBean newBean;
  68. //解析Json数据
  69. JSONObject jsonObject;
  70. try{
  71. jsonObject = new JSONObject(jsonString);
  72. JSONArray jsonArray = jsonObject.getJSONArray("data");
  73. for (int i=0; i<jsonArray.length(); i++){
  74. jsonObject = jsonArray.getJSONObject(i);
  75. newBean = new NewBean();
  76. newBean.setId(jsonObject.getString("id"));
  77. newBean.setTitle(jsonObject.getString("title"));
  78. newBean.setDesc(jsonObject.getString("desc"));
  79. newBean.setTime(jsonObject.getString("time"));
  80. newBean.setContentUrl(jsonObject.getString("content_url"));
  81. newBean.setPicUrl(jsonObject.getString("pic_url"));
  82. newsBeanList.add(newBean);
  83. }
  84. }catch (JSONException e){
  85. e.printStackTrace();
  86. }
  87. } catch (IOException e){
  88. e.printStackTrace();
  89. }
  90. return newsBeanList;
  91. }
  92. /**
  93. * 用is解析网页返回的数据
  94. * @param is
  95. * @return
  96. */
  97. private String readStream(InputStream is){
  98. InputStreamReader isr;
  99. String result = "";
  100. try {
  101. String line = "";
  102. isr = new InputStreamReader(is, "utf-8");
  103. BufferedReader br = new BufferedReader(isr);
  104. while ((line = br.readLine()) != null){
  105. result += line;
  106. }
  107. }catch (UnsupportedEncodingException e){
  108. e.printStackTrace();
  109. }catch (IOException e){
  110. e.printStackTrace();
  111. }
  112. return result;
  113. }
  114. }