国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android打造屬于自己的新聞平臺(tái)(客戶(hù)端+服務(wù)器)

2019-12-12 06:15:54
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

完全屬于自己的新聞?wù)故酒脚_(tái),展示給大家,希望大家喜歡。

一、新聞的數(shù)據(jù)庫(kù)的構(gòu)建

腳本代碼如下:(使用的mysql5.0 數(shù)據(jù)庫(kù))

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";SET time_zone = "+00:00";-- Database: `newsdemo`-- 表的結(jié)構(gòu) `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 ;---- 轉(zhuǎn)存表中的數(shù)據(jù) `news`--INSERT INTO `news` (`id`, `title`, `desc`, `time`, `content_url`, `pic_url`) VALUES(1, 'Oracle解鎖封鎖的賬號(hào)', '我們?cè)诎惭bOracle的時(shí)候最后一步有一個(gè)管理賬戶(hù)的,里邊可以解鎖所所需的賬戶(hù)', '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程序之全國(guó)天氣預(yù)報(bào)查詢(xún)(聚合數(shù)據(jù)開(kāi)發(fā))', '項(xiàng)目演示效果如下: 項(xiàng)目源代碼下載地址: 訪(fǎng)問(wèn)密碼 2eac二、使用 聚合數(shù)據(jù)SDK:', '2015-03-15 11:50:13', 'http://blog.csdn.net/xlgen157387/article/details/44246119', 'http://img.blog.csdn.net/20150314095028546');

執(zhí)行結(jié)果如下:(由于這是使用的appserv,所以在phpMyAdmin中看到的這種效果1)

二、將數(shù)據(jù)庫(kù)中的數(shù)據(jù)轉(zhuǎn)化為json數(shù)據(jù)

由于使用的是php語(yǔ)言,所以要安裝appserv(這個(gè)東西百度一下就知道怎么使用,不在研究?。?/p>

(1)在appserv目錄下的www目錄下創(chuàng)建一個(gè)文件夾NewsDemo,文件夾中創(chuàng)建兩個(gè)php文件如下:

連接數(shù)據(jù)庫(kù)的文件mysql_connect.php

<?php  $con = mysql_connect("localhost", "root", "your password!");  //設(shè)置字符集為utf8  mysql_query("SET NAMES 'utf8'");  mysql_query("SET CHARACTER SET utf8");  mysql_query("SET CHARACTER_SET_RESULT=utf8");  if (!$con){    die(mysql_error());  }  mysql_select_db("newsdemo", $con);?>

具體用于創(chuàng)建json數(shù)據(jù)的getNewsJSON.php

<?php/* * 獲得JSON數(shù)據(jù) * 返回值:title desc time content_url pic_url */ require 'mysql_connect.php'; $n = 0; $result = mysql_query("select * from news"); while ($row = mysql_fetch_array($result)){  $arr[$n++] = array("title" => $row['title'],            "desc" => $row['desc'],            "time" => $row['time'],            "content_url" => $row['content_url'],            "pic_url" => $row['pic_url']          ); } //數(shù)組轉(zhuǎn)換為JSON字符串 echo json_encode($arr);?>

然后訪(fǎng)問(wèn)地址:http://localhost:8080/NewsDemo/getNewsJSON.php

如果出現(xiàn)以下“亂碼”表示成功!
這里寫(xiě)圖片描述

另外給大家一個(gè)在線(xiàn)查看json數(shù)據(jù)的網(wǎng)址:http://json.parser.online.fr/

到此數(shù)據(jù)庫(kù)的準(zhǔn)備完成,開(kāi)始做客戶(hù)端!

三、客戶(hù)端的實(shí)現(xiàn)

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<News> newsList;  //此處需要修改為自己的服務(wù)器地址:也就是具體的服務(wù)器地址:這里不要寫(xiě)你的localhost或者127.0.0.1因?yàn)檫@是要在手機(jī)上運(yùn)行的!  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<News>(); //初始化    adapter = new NewsAdapter(this, newsList); //也是初始化,會(huì)在后期執(zhí)行g(shù)etNewsJSON()方法之后更新    lvNews.setAdapter(adapter); //設(shè)置構(gòu)造器    lvNews.setOnItemClickListener(this);    //這里執(zhí)行了網(wǎng)絡(luò)的的請(qǐng)求操作    HttpUtils.getNewsJSON(GET_NEWS_URL, getNewsHandler); //傳入的一個(gè)handler對(duì)象  }  // 這里是訪(fǎng)問(wèn)網(wǎng)絡(luò)數(shù)據(jù)的時(shí)候,返回的handler  private Handler getNewsHandler = new Handler(){      /**       * 這個(gè)方法是Handler自帶的方法,用于接受返回的數(shù)據(jù)       */      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<jsonArray.length();i++){            JSONObject object = jsonArray.getJSONObject(i);            String title = object.getString("title");            String desc = object.getString("desc");            String time = object.getString("time");            String content_url = object.getString("content_url");            String pic_url = object.getString("pic_url");            newsList.add(new News(title, desc, time, content_url, pic_url));          }          adapter.notifyDataSetChanged();//通知適配器數(shù)據(jù)發(fā)生變化        } catch (Exception e) {          e.printStackTrace();        }      };    };  /**   * 每一個(gè)條目的點(diǎn)擊事件   */  @Override  public void onItemClick(AdapterView<?> adapter, View view, int position, long arg3) {    //獲取被點(diǎn)擊的對(duì)象    News news = newsList.get(position);     Intent intent = new Intent(this, BrowseNewsActivity.class);    intent.putExtra("content_url", news.getContent_url()); //根據(jù)被點(diǎn)擊的對(duì)象,獲取其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;/** * 訪(fǎng)問(wèn)網(wǎng)絡(luò)的工具類(lèi) *  * @author xuliugen *  */public class HttpUtils {  public static void getNewsJSON(final String url, final Handler handler) {    //要訪(fǎng)問(wèn)網(wǎng)絡(luò),開(kāi)啟一個(gè)線(xiàn)程    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的話(huà)要使用Message          Message msg = new Message();          msg.obj = result.toString();          // 通知主線(xiàn)程handler          handler.sendMessage(msg);        } catch (Exception e) {          e.printStackTrace();        }      }    }).start();  }  /**   * 設(shè)置圖片的信息   *    * 在適配器里邊調(diào)用   *    * @param ivPic 需要設(shè)置的view組件   * @param pic_url 圖片的地址   */  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數(shù)據(jù)的bean

主站蜘蛛池模板: 隆回县| 大关县| 井陉县| 枝江市| 天峻县| 墨玉县| 宁晋县| 公安县| 吐鲁番市| 沂水县| 浦县| 永州市| 清镇市| 沾益县| 丁青县| 郑州市| 尚志市| 香港 | 孟村| 醴陵市| 公主岭市| 武功县| 盘锦市| 长寿区| 隆安县| 清新县| 余姚市| 增城市| 邵东县| 和林格尔县| 十堰市| 永州市| 铜陵市| 青冈县| 繁昌县| 密山市| 鄱阳县| 鹤岗市| 祁门县| 西充县| 雷山县|