android查看新闻简单案例

AndroidMainfest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mytest.news"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="21" />

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android: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>
        <activity android:name=".NewsDetailActivity" >
        </activity>
    </application>

    <uses-permission android:name="android.permission.INTERNET" />

</manifest>

新闻列表布局activiti_main.xml

<LinearLayout 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" >

    <ListView
        android:id="@+id/listview_news"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="" />

</LinearLayout>

新闻item布局news_item.xml

<LinearLayout 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" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/news_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

</LinearLayout>

新闻详细布news_detail.xml

<LinearLayout 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" >

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

mainActivity.java加载新闻列表

package com.mytest.news;

import java.util.ArrayList;
import java.util.List;

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.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

    private static final String LOG_TAG = "MainActivity";

    private ListView newsListView;
    private List<News> newsList = new ArrayList<News>();
    private NewsAdapter adapter;
    // private final String HTTP_URL_NEWSLIST =
    // "http://api.1-blog.com/biz/bizserver/news/list.do";
    //
//    private final String HTTP_URL_NEWSLIST = "http://192.168.23.1:8080/testapp/newsjsondata.txt";
    private final String HTTP_URL_NEWSLIST = "http://api.1-blog.com/biz/bizserver/news/list.do";

    private Handler handler = new Handler() {

        public void handleMessage(android.os.Message msg) {

            String newsJsonData = (String) msg.obj;
//            Log.v("MainActivity", "newsJsonData.length:" + newsJsonData.length());

            //注意,必须把newsList当作参数传入进去,直接往newsList对象中添加,不能再重新创建list对象。否则执行notifyDataSetChanged,不会执行getView更新页面。
            NewsUtil.getNewsListByJsonData(newsJsonData,newsList);

            if (newsList != null) {
                Log.v("MainActivity", "newsList.length:" + newsList.size());
            }else{
                Log.v("MainActivity", "newsList is null" );
            }

            adapter.notifyDataSetChanged();
        };
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        newsListView = (ListView) findViewById(R.id.listview_news);

        adapter = new NewsAdapter(this, newsList);
        newsListView.setAdapter(adapter);

        newsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                News news = newsList.get(position);
                Intent intent = new Intent(MainActivity.this, NewsDetailActivity.class);
                intent.putExtra("content_url", news.getArticle_url());
                startActivity(intent);
            }

        });

        getNewsJsonData();

    }

    private void getNewsJsonData() {
        new Thread() {
            @Override
            public void run() {
                String newsJson = NewsUtil.getNewsJsonFromNet(HTTP_URL_NEWSLIST);
                if (newsJson != null && !"".equals(newsJson)) {
                    Message message = handler.obtainMessage(0);
                    message.obj = newsJson;
                    handler.sendMessage(message);
                }
            }
        }.start();

    }

}

NewsUtil.java

package com.mytest.news;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpClientConnection;
import org.apache.http.HttpConnection;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;

import com.google.gson.Gson;
import com.google.gson.JsonObject;

import android.util.Log;

public class NewsUtil {

    private static final String LOG_TAG = "NewsUtil";

    public static String getNewsJsonFromNet(String httpurl) {
        StringBuffer newsJson = new StringBuffer();

        try {

            HttpURLConnection conn = (HttpURLConnection) new URL(httpurl).openConnection();
            InputStream is = conn.getInputStream();
            BufferedReader bufReader = new BufferedReader(new InputStreamReader(is));
            String line = "";
            while ((line = bufReader.readLine()) != null) {
                newsJson.append(line);
            }

            bufReader.close();
            is.close();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return newsJson.toString();
    }

    public static List<News> getNewsListByJsonData(String newsJsonData,List<News> newsList) {

        Log.v(LOG_TAG, "getNewsListByJsonData");

        try {

            /**
             * JSONTokener jt = new JSONTokener(newsJsonData);
             *
             * JSONObject obj = (JSONObject)jt.nextValue(); String title =
             * obj.getString("title"); String source = obj.getString("source");
             * String articleurl = obj.getString("article_url"); News news = new
             * News(title,source,articleurl); Log.v(LOG_TAG, news.toString());
             *
             * newsList.add(news);
             */

            JSONObject jsonobj = new JSONObject(newsJsonData);
            String status = jsonobj.getString("status");
            JSONArray arr = jsonobj.getJSONArray("detail");
            for (int i = 0; i < arr.length(); i++) {
                JSONObject obj = arr.getJSONObject(i);
                String title = obj.getString("title");
                String source = obj.getString("source");
                String articleurl = obj.getString("article_url");
                News news = new News(title, source, articleurl);
//                Log.v(LOG_TAG, news.toString());
                newsList.add(news);
            }

        } catch (JSONException e) {
            Log.v(LOG_TAG, e.getMessage());
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return newsList;
    }
}

NewsAdapter.java

package com.mytest.news;

import java.util.List;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class NewsAdapter extends BaseAdapter {

    private Context context;
    private List<News> newsList;

    public NewsAdapter(Context context, List<News> newsList) {
        this.context = context;
        this.newsList = newsList;
    }

    @Override
    public int getCount() {
        return newsList.size();
    }

    @Override
    public Object getItem(int position) {
        return newsList.get(position)
;    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView tvTitle =null;
        if(convertView==null){
            convertView = LayoutInflater.from(context).inflate(R.layout.news_item, null);

            tvTitle = (TextView) convertView.findViewById(R.id.news_title);
        }

        Log.v("getView", "title--->"+newsList.get(position).getTitle());
        tvTitle.setText(newsList.get(position).getTitle());

        return convertView;
    }

}

News.java

package com.mytest.news;

public class News {

    private String title;
    private String article_url;
    private String source;

    public News(){

    }

    public News(String title, String source, String article_url) {
        this.title = title;
        this.source = source;
        this.article_url = article_url;
    }

    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getArticle_url() {
        return article_url;
    }
    public void setArticle_url(String article_url) {
        this.article_url = article_url;
    }
    public String getSource() {
        return source;
    }
    public void setSource(String source) {
        this.source = source;
    }

    @Override
    public String toString() {
        return "[title:‘"+title+"‘,source:‘"+source+"‘,article_url:‘"+article_url+"‘]";
    }

}

NewsDetailActivity.java

package com.mytest.news;

import java.util.ArrayList;
import java.util.List;

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.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;

public class NewsDetailActivity extends Activity {

    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.news_detail);

        webView = (WebView) findViewById(R.id.webView);

        String content_url = getIntent().getStringExtra("content_url");
        Log.v("NewsDetail", "pic_url" + content_url);
        // webView.loadUrl("http://www.baidu.com");
        webView.loadUrl(content_url);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

    }

}

时间: 2024-10-21 04:20:22

android查看新闻简单案例的相关文章

Android查看联系人简单记录

简单实现打印联系人信息,可以作为插入联系人的基础和主要代码块,作为个人记录的小逻辑 1 package com.lgqrlchinese.contactstest; 2 3 import android.Manifest; 4 import android.content.pm.PackageManager; 5 import android.database.Cursor; 6 import android.net.Uri; 7 import android.provider.Contacts

keepalived简单案例

---------------------------------- 一.前言 二.环境 三.Keepalived体系架构 四.安装Keepalived 五.案例配置 ---------------------------------- 一.前言 keepalived是一个类似于layer3,4&5交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的

Android 查看 无wifi/usb设备的logcat方法

Android 查看 无wifi/usb设备的logcat方法 一.情况 一个定制Android设备,wifi被去掉,我需要调试一个USB设备这样也无法用usb来输出logcat. 因为这个USB设备需要内核驱动支持,因此无法在其它设备调试. 因此有的方法有,一般想到用蓝牙输出logcat,但这是Android wear 才支持的特性. 在代码中加入捕获错误和异常代码,写入sd卡,这个工作量较大,而且麻烦 二.简单的解决办法 1.安装Android Terminal 软件. 一个可用链接是 ht

IDA 调试 Android 方法及简单的脱壳实现

IDA 调试 Android 方法及简单的脱壳实现 标签: android原创逆向调试dalvik 2016-05-24 14:24 9286人阅读 评论(3) 收藏 举报 分类: 原创(25) Android(5) 学习(9) 逆向(4) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 本文参考了一些网络文章,对大大们的技术分享表示感谢.小弟刚刚开始深入去搞Android的逆向不久,写一下学习笔记,希望能抛砖引玉,给新手同学们带来方便.文笔比较烂,这不重要,重要的是按自

day20 project+查看新闻列表 + 点赞 + 图片验证码 + 评论和多级评论 + 后台管理 + webSocket + kindEditor

Day20回顾: 1. 请求生命周期 2. 中间件 md = [ "file_path.classname" ] process_request[可有可无] process_response[必须有] process_request process_response process_request process_response process_request process_response process_request process_response 路由->函数 3.

ExpandableListView的简单案例

ExpandableListView介绍: 长话短说,ExpandableListView就是ListView的扩展.像QQ好友分组列表.看下面的效果图,就知道了. 效果图: ExpandableListView有几个属性值得一说: android:childDivider 来分离子列表项的图片或者是颜色.注:图片不会完全显示,分离子列表项的是一条直线 android:childIndicator 在子列表项旁边显示的指示符.注:可以是一个图片 android:childIndicatorLef

Qt on Android: Qt Quick 简单教程

上一篇<Qt on Android: Qt Quick 之 Hello World 图文详解>我们已经分别在电脑和 Android 手机上运行了第一个 Qt Quick 示例-- HelloQtQuickApp ,这篇呢,我们就来介绍 Qt Quick 编程的一些基本概念,为创建复杂的 Qt Quick 应用奠定基础. 版权所有 foruok ,如需转载请注明来自博客 http://blog.csdn.net/foruok . 首先看一下<Qt on Android: Qt Quick

基于SPARK SQL 读写ORACLE 的简单案例分析常见问题

该文章出自上海harli,偷偷地把女神的东西拿出来,希望女神不要介意. 一.概述 本文主要内容包含Spark SQL读写Oracle表数据的简单案例,并针对案例中比较常见的几个问题给出解决方法. 最后从常见的java.lang.ClassNotFoundException(无法找到驱动类)的异常问题出发,分析相关的几种解决方法,以及各个解决方法之间的异同点. 二.案例中比较常见问题及其解决方法 2.1 启动 首先查看Spark 官网给出的SparkSQL的编程指南部分(http://spark.

Spring Kafka和Spring Boot整合实现消息发送与消费简单案例

本文主要分享下Spring Boot和Spring Kafka如何配置整合,实现发送和接收来自Spring Kafka的消息. 先前我已经分享了Kafka的基本介绍与集群环境搭建方法.关于Kafka的介绍请阅读Apache Kafka简介与安装(一),关于Kafka安装请阅读Apache Kafka安装,关于Kafka集群环境搭建请阅读Apache Kafka集群环境搭建 .这里关于服务器环境搭建不在赘述. Spring Kafka整合Spring Boot创建生产者客户端案例 创建一个kafk