[关闭]
@Senl 2017-04-28T19:39:09.000000Z 字数 6462 阅读 1321

新闻APP开发过程分享

技术学习


Android

Json Test app

4.25

4.26-4.27

4.28

源代码

  1. public class MainActivity extends AppCompatActivity implements View.OnClickListener{
  2. TextView responseText;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. Button sendRequest = (Button) findViewById(R.id.mainActivity_btn_sendRequest);
  8. responseText = (TextView) findViewById(R.id.mainActivity_tv_setUi);
  9. sendRequest.setOnClickListener(this);
  10. }
  11. @Override
  12. public void onClick(View v) {
  13. if (v.getId() == R.id.mainActivity_btn_sendRequest) {
  14. sendRequestWithHttpURLConnection();
  15. }
  16. }
  17. private void sendRequestWithHttpURLConnection() {
  18. // 开启线程来发起网络请求
  19. new Thread(new Runnable() {
  20. @Override
  21. public void run() {
  22. HttpURLConnection connection = null;
  23. BufferedReader reader = null;
  24. try {
  25. URL url = new URL("http://news-at.zhihu.com/api/4/themes");
  26. connection = (HttpURLConnection) url.openConnection();
  27. connection.setRequestMethod("GET");
  28. connection.setConnectTimeout(8000);
  29. connection.setReadTimeout(8000);
  30. InputStream in = connection.getInputStream();
  31. // 下面对获取到的输入流进行读取
  32. reader = new BufferedReader(new InputStreamReader(in));
  33. StringBuilder response = new StringBuilder();
  34. String line;
  35. while ((line = reader.readLine()) != null) {
  36. response.append(line);
  37. }
  38. showResponse(response.toString());
  39. parseJSONObject(response.toString());
  40. } catch (Exception e) {
  41. e.printStackTrace();
  42. } finally {
  43. if (reader != null) {
  44. try {
  45. reader.close();
  46. } catch (IOException e) {
  47. e.printStackTrace();
  48. }
  49. }
  50. if (connection != null) {
  51. connection.disconnect();
  52. }
  53. }
  54. }
  55. }).start();
  56. }
  57. private void showResponse(final String response) {
  58. runOnUiThread(new Runnable() {
  59. @Override
  60. public void run() {
  61. // 在这里进行UI操作,将结果显示到界面上
  62. responseText.setText(response);
  63. }
  64. });
  65. }
  66. private void parseJSONObject(String jsonData) {
  67. try {
  68. JSONObject jsonObjectData = new JSONObject(jsonData);
  69. JSONArray jsonArray = jsonObjectData.getJSONArray("others");
  70. for (int i = 0; i<jsonArray.length(); i++) {
  71. JSONObject jsonObject = jsonArray.getJSONObject(i);
  72. String description = jsonObject.getString("description");
  73. Log.d("MainActivity",description);
  74. }
  75. } catch (JSONException e) {
  76. e.printStackTrace();
  77. }
  78. }
  79. }

测试截图

4.28 AS运行截图


4.28 Android运行截图


4.28晚上以及4.29凌晨

源代码

- MainActivity

  1. public class MainActivity extends AppCompatActivity implements View.OnClickListener {
  2. private TextView responseText;
  3. private List<NewsChannel> list = new ArrayList<NewsChannel>();
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8. responseText = (TextView) findViewById(R.id.mainActivity_tv_setUi);
  9. Button sendRequest = (Button) findViewById(R.id.btn);
  10. sendRequest.setOnClickListener(this);
  11. Button btn = (Button) findViewById(R.id.btn1);
  12. btn.setOnClickListener(this);
  13. }
  14. @Override
  15. public void onClick(View v) {
  16. if (v.getId() == R.id.btn) {
  17. sendRequestWithHttpURLConnection();
  18. }
  19. if (v.getId() == R.id.btn1) {
  20. Intent intent = new Intent(MainActivity.this,SecondActivity.class);
  21. ArrayList<String> nameList = new ArrayList<>();
  22. HashMap<String,String> map = new HashMap<String, String>();
  23. for (NewsChannel channel : list ){
  24. nameList.add(channel.mName);
  25. map.put(channel.mName,channel.mDescription);
  26. }
  27. ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String, String>>();
  28. list.add(0,map);
  29. intent.putExtra("name", nameList);
  30. intent.putExtra("map",list);
  31. startActivity(intent);
  32. }
  33. }
  34. private void sendRequestWithHttpURLConnection() {
  35. // 开启线程来发起网络请求
  36. new Thread(new Runnable() {
  37. @Override
  38. public void run() {
  39. HttpURLConnection connection = null;
  40. BufferedReader reader = null;
  41. try {
  42. URL url = new URL("http://news-at.zhihu.com/api/4/themes");
  43. connection = (HttpURLConnection) url.openConnection();
  44. connection.setRequestMethod("GET");
  45. connection.setConnectTimeout(8000);
  46. connection.setReadTimeout(8000);
  47. InputStream in = connection.getInputStream();
  48. // 下面对获取到的输入流进行读取
  49. reader = new BufferedReader(new InputStreamReader(in));
  50. StringBuilder response = new StringBuilder();
  51. String line;
  52. while ((line = reader.readLine()) != null) {
  53. response.append(line);
  54. }
  55. showResponse(response.toString());
  56. parseJSONObject(response.toString());
  57. } catch (Exception e) {
  58. e.printStackTrace();
  59. } finally {
  60. if (reader != null) {
  61. try {
  62. reader.close();
  63. } catch (IOException e) {
  64. e.printStackTrace();
  65. }
  66. }
  67. if (connection != null) {
  68. connection.disconnect();
  69. }
  70. }
  71. }
  72. }).start();
  73. }
  74. private void showResponse(final String response) {
  75. runOnUiThread(new Runnable() {
  76. @Override
  77. public void run() {
  78. // 在这里进行UI操作,将结果显示到界面上
  79. responseText.setText(response);
  80. }
  81. });
  82. }
  83. private void parseJSONObject(String jsonData) {
  84. /*
  85. * others: 新闻类型列表
  86. thumbnail : 供显示的图片地址
  87. description : 主题日报的介绍
  88. id: 新闻类型的唯一表示, 可用于获取该类型下的新闻列表
  89. name: 新闻类型的名字
  90. */
  91. try {
  92. JSONObject jsonObjectData = new JSONObject(jsonData);
  93. JSONArray jsonArray = jsonObjectData.getJSONArray("others");
  94. NewsChannel newsChannel;
  95. for (int i = 0; i < jsonArray.length(); i++) {
  96. Parcel parcel = Parcel.obtain();
  97. newsChannel = new NewsChannel();
  98. JSONObject jsonObject = jsonArray.getJSONObject(i);
  99. String description = jsonObject.getString("description");
  100. String name = jsonObject.getString("name");
  101. newsChannel.mDescription = description;
  102. newsChannel.mName = name;
  103. list.add(newsChannel);
  104. parcel.recycle();
  105. }
  106. } catch (JSONException e) {
  107. e.printStackTrace();
  108. }
  109. }
  110. }

- SecondActivity

  1. public class SecondActivity extends AppCompatActivity {
  2. private Spinner mSpinnerSelect;
  3. private SimpleAdapter mSimpleAdapter;
  4. private List<NewsChannel> mList = new ArrayList<NewsChannel>();
  5. HashMap<String,String> map;
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.activity_second);
  10. Intent intent = getIntent();
  11. ArrayList<String> nameList = intent.getStringArrayListExtra("name");
  12. ArrayList<HashMap<String,String>> list = (ArrayList<HashMap<String, String>>) intent.getSerializableExtra("map");
  13. map = list.get(0);
  14. ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, nameList);
  15. adapter.setDropDownViewResource(android.R.layout.simple_list_item_single_choice);
  16. Spinner sp = (Spinner) findViewById(R.id.spinner);
  17. sp.setAdapter(adapter);
  18. sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
  19. // parent: 为控件Spinner view:显示文字的TextView position:下拉选项的位置从0开始
  20. public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
  21. TextView tvResult = (TextView) findViewById(R.id.tvResult);
  22. //获取Spinner控件的适配器
  23. ArrayAdapter<String> adapter = (ArrayAdapter<String>) parent.getAdapter();
  24. tvResult.setText(map.get(adapter.getItem(position)));
  25. }
  26. //没有选中时的处理
  27. public void onNothingSelected(AdapterView<?> parent) {
  28. }
  29. });
  30. }
  31. }

测试截图

- MainActivity

4.29 Android运行截图1


- SecondActivity



添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注