栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android打造属于自己的新闻平台(客户端+服务器)

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android打造属于自己的新闻平台(客户端+服务器)

完全属于自己的新闻展示平台,展示给大家,希望大家喜欢。

一、新闻的数据库的构建

脚本代码如下:(使用的mysql5.0 数据库)

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

-- Database: `newsdemo`
-- 表的结构 `news`

CREATE TABLE IF NOT EXISTS `news` (
 `id` int(10) NOT NULL AUTO_INCREMENT,
 `title` text NOT NULL,
 `desc` text NOT NULL,
 `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 `content_url` text NOT NULL,
 `pic_url` text NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

--
-- 转存表中的数据 `news`
--

INSERT INTO `news` (`id`, `title`, `desc`, `time`, `content_url`, `pic_url`) VALUES
(1, 'Oracle解锁封锁的账号', '我们在安装Oracle的时候最后一步有一个管理账户的,里边可以解锁所所需的账户', '2015-03-15 11:50:03', 'http://blog.csdn.net/xlgen157387/article/details/41595709', 'http://img.blog.csdn.net/20141129144613046?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGxnZW4xNTczODc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center'),
(2, 'Android程序之全国天气预报查询(聚合数据开发)', '项目演示效果如下: 项目源代码下载地址: 访问密码 2eac二、使用 聚合数据SDK:', '2015-03-15 11:50:13', 'http://blog.csdn.net/xlgen157387/article/details/44246119', 'http://img.blog.csdn.net/20150314095028546');

执行结果如下:(由于这是使用的appserv,所以在phpMyAdmin中看到的这种效果1)

二、将数据库中的数据转化为json数据

由于使用的是php语言,所以要安装appserv(这个东西百度一下就知道怎么使用,不在研究!)

(1)在appserv目录下的www目录下创建一个文件夹NewsDemo,文件夹中创建两个php文件如下:

连接数据库的文件mysql_connect.php



具体用于创建json数据的getNewsJSON.php

 $row['title'],
     "desc" => $row['desc'],
     "time" => $row['time'],
     "content_url" => $row['content_url'],
     "pic_url" => $row['pic_url']
   );
 }

 //数组转换为JSON字符串
 echo json_encode($arr);

?>

然后访问地址:http://localhost:8080/NewsDemo/getNewsJSON.php

如果出现以下“乱码”表示成功!
这里写图片描述

另外给大家一个在线查看json数据的网址:http://json.parser.online.fr/

到此数据库的准备完成,开始做客户端!

三、客户端的实现

MainActivity.java如下:

package com.xuliugen.news;

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

import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

import com.xuliugen.news.adapter.NewsAdapter;
import com.xuliugen.news.model.News;
import com.xuliugen.news.utils.HttpUtils;

public class MainActivity extends Activity implements OnItemClickListener{

  private ListView lvNews;
  private NewsAdapter adapter;
  private List newsList;

  //此处需要修改为自己的服务器地址:也就是具体的服务器地址:这里不要写你的localhost或者127.0.0.1因为这是要在手机上运行的!
  public static final String GET_NEWS_URL = "http://172.23.252.89:8080/NewsDemo/getNewsJSON.php";

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

    lvNews = (ListView) findViewById(R.id.lvNews); //一条一条的消息展示消息
    newsList = new ArrayList(); //初始化
    adapter = new NewsAdapter(this, newsList); //也是初始化,会在后期执行getNewsJSON()方法之后更新

    lvNews.setAdapter(adapter); //设置构造器
    lvNews.setonItemClickListener(this);

    //这里执行了网络的的请求操作
    HttpUtils.getNewsJSON(GET_NEWS_URL, getNewsHandler); //传入的一个handler对象
  }

  // 这里是访问网络数据的时候,返回的handler
  private Handler getNewsHandler = new Handler(){

      
      public void handleMessage(android.os.Message msg) {
 String jsonData = (String) msg.obj;
 System.out.println(jsonData);
 try {

   //下边是解析json
   JSonArray jsonArray = new JSonArray(jsonData);
   for (int i=0;i adapter, View view, int position, long arg3) {

    //获取被点击的对象
    News news = newsList.get(position); 
    Intent intent = new Intent(this, BrowseNewsActivity.class);
    intent.putExtra("content_url", news.getContent_url()); //根据被点击的对象,获取其url
    startActivity(intent);
  }

}

HttpUtils.java如下:

package com.xuliugen.news.utils;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.widget.ImageView;


public class HttpUtils {

  public static void getNewsJSON(final String url, final Handler handler) {

    //要访问网络,开启一个线程
    new Thread(new Runnable() {
      @Override
      public void run() {
 HttpURLConnection conn;
 InputStream inputStream;
 try {
   conn = (HttpURLConnection) new URL(url).openConnection();
   conn.setRequestMethod("GET");
   inputStream = conn.getInputStream();
   BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
   String line = "";
   StringBuilder result = new StringBuilder(); //StringBuilder初始化不可以null
   while ((line = reader.readLine()) != null) {
     result.append(line);
   }

   //使用handler的话要使用Message
   Message msg = new Message();
   msg.obj = result.toString();

   // 通知主线程handler
   handler.sendMessage(msg);
 } catch (Exception e) {
   e.printStackTrace();
 }
      }
    }).start();
  }

  
  public static void setPicBitmap(final ImageView ivPic, final String pic_url) {
    new Thread(new Runnable() {
      @Override
      public void run() {
 try {
   HttpURLConnection conn = (HttpURLConnection) new URL(pic_url).openConnection();
   conn.connect();
   InputStream is = conn.getInputStream();
   Bitmap bitmap = BitmapFactory.decodeStream(is);
   ivPic.setImageBitmap(bitmap);
   is.close();
 } catch (Exception e) {
   e.printStackTrace();
 }
      }
    }).start();
  }

}

用于保存json数据的bean–》News.java

package com.xuliugen.news.model;


public class News {

  private String title;
  private String desc;
  private String time;
  private String content_url;
  private String pic_url;

  
  public News(String title, String desc, String time, String content_url,
      String pic_url) {
    setTitle(title);
    setDesc(desc);
    setTime(time);
    setContent_url(content_url);
    setPic_url(pic_url);
  }

  public String getTitle() {
    return title;
  }

  public void setTitle(String title) {
    this.title = title;
  }

  public String getDesc() {
    return desc;
  }

  public void setDesc(String desc) {
    this.desc = desc;
  }

  public String getTime() {
    return time;
  }

  public void setTime(String time) {
    this.time = time;
  }

  public String getContent_url() {
    return content_url;
  }

  public void setContent_url(String content_url) {
    this.content_url = content_url;
  }

  public String getPic_url() {
    return pic_url;
  }

  public void setPic_url(String pic_url) {
    this.pic_url = pic_url;
  }

}

NewsAdapter.java如下:

package com.xuliugen.news.adapter;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.baseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.xuliugen.news.R;
import com.xuliugen.news.model.News;
import com.xuliugen.news.utils.HttpUtils;


public class NewsAdapter extends baseAdapter {

  private Context context;
  private List newsList;

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

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

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

  @Override
  public long getItemId(int position) {
    return position;
  }

  
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) { //如果为空则重新创建
      convertView = LayoutInflater.from(context).inflate(R.layout.news_item, null);
    }
    // 获得news-item中的控件
    TextView tvTitle = (TextView) convertView.findViewById(R.id.tvTitle);
    TextView tvDesc = (TextView) convertView.findViewById(R.id.tvDesc);
    TextView tvTime = (TextView) convertView.findViewById(R.id.tvTime);
    ImageView ivPic = (ImageView) convertView.findViewById(R.id.ivPic);

    News news = newsList.get(position);
    tvTitle.setText(news.getTitle());
    tvDesc.setText(news.getDesc());
    tvTime.setText(news.getTime());

    String pic_url = news.getPic_url();
    HttpUtils.setPicBitmap(ivPic, pic_url);

    return convertView;
  }

}

具体的布局文件省略,看一下清单文件:




  
  

  
    
      
 

 
      
    
    
  



好啦!具体项目源代码资源如下: http://xiazai.jb51.net/201606/yuanma/Androidnews(jb51.net).rar

知识点总结:数据库数据到json数据格式的转换、访问json数据的方法及解析json的方法、适配器等。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/162394.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号