中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

基于PHP后臺(tái)的Android新聞瀏覽客戶端
來源:易賢網(wǎng) 閱讀:1363 次 日期:2016-08-19 14:43:41
溫馨提示:易賢網(wǎng)小編為您整理了“基于PHP后臺(tái)的Android新聞瀏覽客戶端”,方便廣大網(wǎng)友查閱!

本文實(shí)例為大家分享了Android新聞瀏覽客戶端,基于php后臺(tái),供大家參考,具體內(nèi)容如下

1、使用HBuilder進(jìn)行PHP環(huán)境配置,測(cè)試是否可以查詢MySQL語句,之前都已經(jīng)詳細(xì)說明過了。

2、此處php后臺(tái)實(shí)現(xiàn)mysql的查詢功能,并以JSON數(shù)據(jù)格式返回個(gè)客戶端

在PHP此處建立一個(gè)mysql_connect.php文件,實(shí)現(xiàn)數(shù)據(jù)庫的連接,并設(shè)置字符集格式。

<?php

$con = mysql_connect("localhost","root","123456");

//設(shè)置字符集為UTF-8 可解決中文亂碼

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);

?>

然后新建一個(gè)getNewsJSON.php文件用于進(jìn)行將查詢結(jié)果轉(zhuǎn)換成JSON字符串格式。只需要 json_encode這個(gè)方法即可。

<?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);

?>

重點(diǎn)在于Android端的設(shè)計(jì)開發(fā)

1、設(shè)計(jì)界面

由于需要以在ListView的每個(gè)Item中設(shè)置相同的格式,所以此處運(yùn)用ListView+Adapter的形式

在主界面LinearLayout中添加一個(gè)ListView控件

2、Mainactivity程序如下:

public class MainActivity extends Activity implements OnItemClickListener{

  private ListView lvNews ;

  private NewsAdapter adapter ;

  //定義集合

  private List<News> newsList ;

  //獲取json字符串的URL地址

  public static final String GET_NEWS_URL = "http://211.87.234.20/NewsDemo/getNewsJSON.php";

  //獲取msg之后如何處理

  private Handler getNewsHandler = new Handler(){

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

  String jsonData = (String) msg.obj ;

  System.out.println(jsonData) ;

  try {

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") ;

System.out.println("title="+title) ;

//add一個(gè)News類型的Object

newsList.add(new News(title,desc,time,content_url,pic_url)) ;

}

//通知更新

adapter.notifyDataSetChanged() ;

} catch (JSONException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

  } ;

  } ;

  @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) ;

    lvNews.setAdapter(adapter) ;

    lvNews.setOnItemClickListener(this) ;

    HttpUtils.getNewsJSON(GET_NEWS_URL,getNewsHandler) ;

  }

  @Override

  public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.

    getMenuInflater().inflate(R.menu.main, menu);

    return true;

  }

@Override

public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {

// TODO Auto-generated method stub

News news = newsList.get(position) ;

Intent intent = new Intent(this,BrowseNewsActivity.class) ;

intent.putExtra("content_url",news.getContent_url()) ;

startActivity(intent) ;

}

}

此處需要一個(gè)工具類HttpUtils以及自定義的NewsAdapter以實(shí)現(xiàn)item的視圖顯示.

HttpUtils代碼如下:

package com.MR.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 {

//工具類直接定義成靜態(tài)方法即可

/*url用于內(nèi)部類中,所以要將其設(shè)定為final類型*/

/*讀取完成需要通知主線程,需要使用handler*/

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

//訪問網(wǎng)絡(luò),時(shí)間長,開啟新線程

new Thread(new Runnable(){

@Override

public void run() {

// TODO Auto-generated method stub

HttpURLConnection conn ;

InputStream is ;

try {

conn = (HttpURLConnection) new URL(url).openConnection() ;

//GET方式獲取

conn.setRequestMethod("GET") ;

//得到輸入流

is=conn.getInputStream() ;

//讀取數(shù)據(jù)用緩沖,里面要傳入一個(gè)reader

BufferedReader reader = new BufferedReader(new InputStreamReader(is));

//一行一行讀取數(shù)據(jù)

String line = "";

//沒讀完一行進(jìn)行拼接,高效

StringBuilder result = new StringBuilder();

while((line = reader.readLine()) != null){

result.append(line);

}

Message msg = new Message() ;

//msg.obj可以放進(jìn)去任何對(duì)象

msg.obj = result.toString() ;

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() {

// TODO Auto-generated method stub

try {

HttpURLConnection conn = (HttpURLConnection) new URL(pic_url).openConnection() ;

conn.connect() ;

InputStream is = conn.getInputStream() ;

//bitmap就是所需圖片資源

/*從資源文件中的到圖片*/

Bitmap bitmap = BitmapFactory.decodeStream(is) ;

ivPic.setImageBitmap(bitmap) ;

is.close() ;

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}).start() ;

}

}

NewsAdapter代碼如下:

package com.MR.news.adapter;

import java.util.List;

import com.MR.news.R;

import com.MR.news.model.News;

import com.MR.news.utils.HttpUtils;

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;

public class NewsAdapter extends BaseAdapter {

//聲明上下文對(duì)象,后面的getView方法需要

private Context context;

private List<News> newsList;

public NewsAdapter(Context context, List<News> newsList){

this.context = context ;

this.newsList = newsList ;

}

@Override

public int getCount() {

// TODO Auto-generated method stub

return newsList.size();

}

@Override

public Object getItem(int position) {

// TODO Auto-generated method stub

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 arg2) {

// TODO Auto-generated method stub

if(convertView == null){

convertView = LayoutInflater.from(context).inflate(R.layout.news_item,null) ;

}

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;

}

}

news_item用來設(shè)置每個(gè)item的顯示格式

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  android:layout_width="match_parent"

  android:layout_height="match_parent" >

  <ImageView

    android:id="@+id/ivPic"

    android:layout_width="42dp"

    android:layout_height="42dp"

    android:src="@drawable/ic_launcher"

    />

  <TextView

    android:id="@+id/tvTitle"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_alignParentTop="true"

    android:layout_toRightOf="@+id/ivPic"

    android:text="title"

    android:textSize="18sp" />

  <TextView

    android:id="@+id/tvDesc"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_alignLeft="@+id/tvTitle"

    android:layout_below="@+id/tvTitle"

    android:text="desc"

    android:textSize="18sp" />

  <TextView

    android:id="@+id/tvTime"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_alignParentRight="true"

    android:text="time"

    android:textSize="10sp"

    />

</RelativeLayout>

注意:此item中需要顯示單個(gè)圖片,所以用到Bitmap這個(gè)類。由于用到網(wǎng)絡(luò)傳輸,所以需要用到線程這個(gè)概念!!

關(guān)鍵理解handler message以及l(fā)oop這三者的關(guān)系。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)Android軟件編程有所幫助。

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:基于PHP后臺(tái)的Android新聞瀏覽客戶端
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026上岸·考公考編培訓(xùn)報(bào)班

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
狠狠久久五月精品中文字幕| 欧美日韩精品系列| 欧美日韩色一区| 欧美电影资源| 国产精品女主播在线观看| 老司机免费视频一区二区| 国产精品久久久久久久久免费桃花 | 国产日产高清欧美一区二区三区| 亚洲精品久久久久中文字幕欢迎你| 国产精品久久婷婷六月丁香| 欧美在线日韩精品| 久久久夜夜夜| 免费在线一区二区| 欧美日韩国产大片| 国产日韩欧美在线一区| 久久九九全国免费精品观看| 国产一区二三区| 国产视频一区二区在线观看| 国产伪娘ts一区| 91久久久久久久久| 亚洲激情网站| 亚洲男人的天堂在线| 久久精品国产亚洲一区二区三区 | 亚洲日本中文| 亚洲免费久久| 亚洲欧美不卡| 巨胸喷奶水www久久久免费动漫| 欧美国产亚洲视频| 国产日韩综合一区二区性色av| 在线观看日韩精品| 在线精品高清中文字幕| 欧美理论电影在线观看| 国产精品成人久久久久| 在线观看亚洲视频| 欧美在线一级视频| 免费高清在线视频一区·| 蜜桃av综合| 午夜亚洲伦理| 久久久国产精品一区| 最新日韩在线| 亚洲视频在线播放| 欧美激情欧美激情在线五月| 欧美视频在线一区二区三区| 亚洲第一偷拍| 夜夜嗨av一区二区三区网页| 亚洲午夜免费福利视频| 美女久久网站| 99国产精品久久| 欧美三级中文字幕在线观看| 91久久久亚洲精品| 欧美日本在线视频| 海角社区69精品视频| 日韩一区二区久久| 欧美在线视频观看免费网站| 国产伦精品免费视频| 欧美在线网址| 亚洲美女毛片| 国产欧美日韩精品丝袜高跟鞋| 欧美一区二区在线免费观看| 最新国产乱人伦偷精品免费网站| 香蕉av777xxx色综合一区| 欧美日韩国产欧| 国产乱码精品1区2区3区| 亚洲午夜激情| 亚洲成色www8888| 麻豆精品视频在线| 亚洲破处大片| 欧美美女bbbb| 久久米奇亚洲| 久久久av水蜜桃| 噜噜噜噜噜久久久久久91| 国产精品久久久久av免费| 久久久夜精品| 亚洲欧美乱综合| 在线观看视频一区| 黄色精品一区二区| 国产亚洲欧洲| 久久五月激情| 午夜精品久久久久久久男人的天堂| 亚洲第一狼人社区| 好吊视频一区二区三区四区 | 亚洲欧洲一区二区三区| 香蕉国产精品偷在线观看不卡| 国产欧美日韩一区| 欧美日韩高清在线| 亚洲精品系列| 欧美久久精品午夜青青大伊人| 亚洲一二三区在线观看| 一本色道久久综合精品竹菊 | 亚洲性xxxx| 国内精品国语自产拍在线观看| 国产精品久久久久高潮| 国产一区二区精品| 一本久道久久综合狠狠爱| 小黄鸭精品aⅴ导航网站入口 | 在线欧美小视频| 正在播放日韩| 欧美精品福利视频| 欧美日韩国产电影| 国产欧美婷婷中文| 亚洲一区二区三区在线视频| 日韩一区二区电影网| 国产欧美日韩在线| 欧美xxx成人| 精品91久久久久| 久久精品国产久精国产爱| 在线成人免费视频| 美女精品网站| 日韩亚洲精品电影| 国产精品国产三级国产| 久久久久久国产精品mv| 亚洲电影视频在线| 欧美极品aⅴ影院| 亚洲午夜激情网站| 亚洲大黄网站| 欧美视频亚洲视频| 久久福利影视| 国内揄拍国内精品久久 | 亚洲欧美激情视频| 欧美日本在线| 亚洲一区二区三区四区中文 | 国产专区一区| 久久婷婷色综合| 亚洲午夜电影网| 久久国产精品久久国产精品| 国产伦精品一区二区三区高清版| 日韩亚洲欧美一区二区三区| 欧美日韩国产综合久久| 欧美亚洲一区二区在线| 国产精品久久久一本精品| 欧美网站在线| 国产日韩欧美日韩大片| 欧美亚洲一区二区在线| 韩国在线一区| 欧美成人精品一区二区三区| 亚洲永久在线观看| 国产精品一二三视频| 久久精品人人爽| 亚洲国产精品va| 国产麻豆成人精品| 美女主播视频一区| 亚洲国产成人91精品| 欧美亚一区二区| 欧美暴力喷水在线| 亚洲毛片av在线| 亚洲韩日在线| 国产日韩欧美在线播放不卡| 久久免费视频这里只有精品| 日韩亚洲在线观看| 国产日韩1区| 欧美成年人网| 销魂美女一区二区三区视频在线| 在线一区日本视频| 欧美成人精品激情在线观看| 国产在线精品二区| 亚洲一区二区三区视频播放| 国产精品一区三区| 欧美美女bbbb| 欧美午夜片在线观看| 国产精品久久午夜夜伦鲁鲁| 免费亚洲电影在线| 久热这里只精品99re8久| 宅男在线国产精品| 国产精品自拍网站| 久久久久久久一区二区| 亚洲图片欧美一区| 亚洲精品免费观看| 你懂的国产精品永久在线| 欧美激情1区2区| 久久成人精品无人区| 亚洲一区二区三区影院| 亚洲高清不卡在线观看| 久久久久久有精品国产| 欧美亚洲一区| 久久久精品国产免大香伊| 欧美日韩亚洲综合一区| 日韩亚洲精品视频| 亚洲欧洲在线观看| 一本色道久久综合一区 | 欧美精品偷拍| 欧美成在线观看| 欧美精品麻豆| 国产精品久久久久久影院8一贰佰| 国产精品美女久久久免费| 国精产品99永久一区一区| 国产专区欧美精品| 日韩视频在线观看国产| 亚洲欧美成人一区二区三区| 在线亚洲观看| 欧美国产激情| 国产区精品在线观看| 久久人人97超碰国产公开结果| 欧美精品成人在线| 国产日韩视频| 亚洲欧洲日本国产| 欧美伊人久久久久久午夜久久久久 | 国产精品免费在线| 在线成人小视频| 亚洲欧美国产一区二区三区| 又紧又大又爽精品一区二区|