src/main/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.myapplication"><uses-permission android:name="android.permission.INTERNET"/><applicationandroid:allowBackup="true"android:usesCleartextTraffic="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activityandroid:name=".MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:name=".NewsActivity"android:label="临时新闻显示页" ></activity></application></manifest>

com/example/myapplication/MainActivity.java

package com.example.myapplication;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;
import java.util.ArrayList;import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;public class MainActivity extends Activity {// Model:模型层,使用ArrayList<String>保存数据源private ArrayList<String> mTitleList; // 新闻标题private ArrayList<String> mUrlList; // 新闻连接// View:视图层,ListViewprivate ListView mListView;// Presenter:表示层,ArrayAdapterprivate ArrayAdapter<String> mAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 实例化数据源mTitleList = new ArrayList<String>();// 对应的新闻连接mUrlList = new ArrayList<String>();// 找控件mListView = (ListView) findViewById(R.id.list_view);// 实例化适配器// 参数一:上下文,直接传 类名.this// 参数二:滑动列表每一栏内部的子布局,如果要使用Android自带的子布局需要注意写法// 参数三:Model模型层mAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, mTitleList);// 发现视图层View没有跟表示层Presenter建立关系mListView.setAdapter(mAdapter);// 设置点击事件监听器mListView.setOnItemClickListener(new OnItemClickListener() {// 参数三:位置,即点击的是第几个Item@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {// 拿到点击的新闻对应的链接String url = mUrlList.get(position);// 跳转传值Intent intent = new Intent(MainActivity.this, NewsActivity.class);intent.putExtra("url", url);startActivity(intent);}});new Thread() {public void run() {// 准备一个要访问的链接地址(把key换成自己的!!!!!)String site = "http://v.juhe.cn/toutiao/index?type=&key=*******************************";try {// 转换字符串为URL对象URL url = new URL(site);// 获得网络请求对象HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 设置请求模式为GETconn.setRequestMethod("GET");// 获得网络请求状态码int httpCode = conn.getResponseCode();// 如果正常if (httpCode == 200) {// 获得字节输入流InputStream is = conn.getInputStream();// 字节流转字符流InputStreamReader isr = new InputStreamReader(is);// 套一层缓冲流提高效率(字符输入缓冲流)BufferedReader br = new BufferedReader(isr);// 用于拼接服务器返回的字符数据的字符串对象String data = new String();// 每次循环读取的bufferString buf;// 循环读取while ((buf = br.readLine()) != null) {// 拼接结果data += buf;}// 关闭流br.close();// 输出接收到的服务器的数据Log.d("MainActivity", data);// 解析JSON数据(一层一层解析)// 最外层是一个JSONObject对象JSONObject object = new JSONObject(data);// 通过“result”键取得对应的值:JSONObject对象JSONObject result = object.getJSONObject("result");// 拿到“data”键对应的值:JSONArray(JSONObject数组)JSONArray dataArray = result.getJSONArray("data");// 遍历数组for (int i = 0; i < dataArray.length(); i++) {//每一条新闻的JSONObject对象JSONObject news = dataArray.getJSONObject(i);//拿到新闻中需要需要的数据String title = news.getString("title");String url2 = news.getString("url");//添加到数据源中mTitleList.add(title);mUrlList.add(url2);}//切换到主线程刷新UIrunOnUiThread(new Runnable() {@Overridepublic void run() {//主线程代码mAdapter.notifyDataSetChanged();}});} else {Log.d("MainActivity", "http请求失败,状态码:" + httpCode);}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (JSONException e) {e.printStackTrace();}}}.start();}}

com/example/myapplication/NewsActivity.java

package com.example.myapplication;import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;public class NewsActivity extends Activity{//定义一个变量private WebView mWebView;//定义一个等待显示浮动窗口private ProgressDialog mDialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//设置布局文件setContentView(R.layout.activity_news);//先取出Intent,再取出Intent里面的数据Intent intent = getIntent();String url = intent.getStringExtra("url");//设置等待显示浮动窗口的内容mDialog = new ProgressDialog(NewsActivity.this);mDialog.setTitle("今日头条");mDialog.setMessage("正在加载中...");mWebView = (WebView) findViewById(R.id.web_view);//让网络浏览的客户端设定在当前的WebView控件上(防止跳转到原生浏览器)mWebView.setWebViewClient(new WebViewClient(){//开始加载网页的回调方法@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);//弹出等待窗口mDialog.show();}//网页加载结束的回调方法@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);//如果等待窗口还在显示,那么关闭if(mDialog.isShowing()) {mDialog.dismiss();}}});//开启JavaScriptmWebView.getSettings().setJavaScriptEnabled(true);//加载网页mWebView.loadUrl(url);}}

layout/activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.myapplication.MainActivity" ><ListViewandroid:id="@+id/list_view"android:layout_width="match_parent"android:layout_height="match_parent" ></ListView></RelativeLayout>

layout/activity_news.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><WebViewandroid:id="@+id/web_view"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>

【Android】新闻资讯APP的简易实现相关推荐

  1. 新闻资讯APP开发成本需要多少钱?

    新闻资讯APP开发成本需要多少钱?首先,APP开发的价格是根据APP的功能进行报价的,所以我们要知道一个新闻APP有什么功能. 一.新闻APP开发有什么功能? 1.资讯 资讯是新闻APP的基础,不论是 ...

  2. c语言什么意思 app 视频 新闻,开发新闻资讯APP需要哪些功能?

    原标题:开发新闻资讯APP需要哪些功能? 在过去,人们获取新闻信息的方式一般是通过电视.报纸.广播之类的媒介,而在当今的互联网时代,人们获取信息的途径主要来源于各种新闻资讯APP. 这类APP相较于传 ...

  3. mui 新闻资讯app模板下载_简单易学的app制作教程:6步0编程进行app开发

    平常我们生活总会遇到各种各样的手机app,有没有想过自己制作一款app软件?在很多人的眼里,app开发只能找专业的技术人员,其实现在,普通人也能制作app了.今天就为大家分享一个app制作教程,教你不 ...

  4. 新闻资讯java开发_新闻资讯app开发的功能与意义

    获取新闻的目的因人而异,但对获取新闻的需求是一样的.现在是移动互联网的时代.人们不再想依靠传统的手段,而把便利作为获取服务的核心.因此,开发新闻咨询app是必要的.其到来不仅意味着获得新闻登上新的阶梯 ...

  5. 基于android的新闻资讯app

  6. android综合资讯App、自定义悬浮框、屏幕助手、空灵音乐源码等

    Android精选源码 综合资讯类APP android自定义悬浮窗 android实现支付宝信用界面动画 android一个类似点融投资的app源码 Android手机屏幕助手 android视频播 ...

  7. 【UNI-APP】新闻资讯APP总结

    环境开发 模板语法 工作内容 1 首页功能开发 1.1 初始化数据库 1.2. 配置tabbar 1.3. 自定义导航栏 1.4. 添加小程序的状态栏(导航栏适配小程序) 1.5. 使用字体图标 1. ...

  8. 新闻资讯APP开发流程(八)-- ContentView.js

    内容视图是最重要的视图,因为我们的主要的内容将在此视图中显示 首先给它一张背景图 var self = Titanium.UI.createView({height:'100%',top:'50dp' ...

  9. 咖友:打个雷啊 | 今日头条VS腾讯新闻:让马化腾也坐不住的新闻资讯行业未来之争...

    PMCAFF(pmcaff.com)是在中国非常流行的产品经理社区.汇集160000+会员,8000+业界大咖,致力于为产品人提供专业的产品沙龙.课程培训.求职招聘等服务. 本文由PMCAFF会员打个 ...

最新文章

  1. pyqt5实战之自定义弹窗口
  2. golang红包算法
  3. 平述factory reset ——从main system到重引导流程
  4. 消防信号总线原理_消防报警系统中消防模块分类与用途简介
  5. html5 loader,7种基于GSAP的SVG Loader加载动画特效
  6. VC2008的运行库问题。
  7. 【PKUWC2018】Minimax【线段树合并】
  8. CF5E-Bindian Signalizing【单调栈】
  9. jitter 如何优化网络_如何做好关键词优化网络?
  10. redis命令执行流程分析
  11. 实现excel导入_PhpOffice实现Excel表格导入的解耦方法
  12. 《Total Commander:万能文件管理器》——第9.6节.后记
  13. Java基础之字符串详细比较
  14. UVA 10651 - Pebble Solitaire
  15. 有了net send,谁还用IM?
  16. Dataframe修改列名
  17. 使用N2N搭建虚拟局域网|可用于红警、我的世界联机
  18. Android名片识别
  19. python 合并工作簿_Excel:快速合并多张表格或多个文件(工作簿)的数据(附Python代码)...
  20. Day14-正则表达式

热门文章

  1. 利用CSS实现居中对齐
  2. 雷军:何以英雄背骂名
  3. 杂记——12.腾讯会议使用OBS虚拟摄像头实现多屏幕共享的解决方法
  4. 微信小程序中的省市区选择器
  5. python怎么打印列表长度_打印知道长度和宽度的钻石(Python)
  6. 华为云-号码隐私保护
  7. 脚本回放出现乱码而导致错误
  8. 三维人脸实践:基于Face3D的人脸生成、渲染与三维重建 <一>
  9. 第4章第19节:异形图表:创作扇区半径依次增大的饼图 [PowerPoint精美幻灯片实战教程]
  10. 视频怎么添加水印?快来收好这些方法