最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于PHP后臺(tái)的Android新聞瀏覽客戶端

 更新時(shí)間:2016年05月23日 10:45:05   作者:xiaopihaierletian  
這篇文章主要為大家詳細(xì)介紹了基于PHP后臺(tái)的Android新聞瀏覽客戶端,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

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

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

在PHP此處建立一個(gè)mysql_connect.php文件,實(shí)現(xiàn)數(shù)據(jù)庫(kù)的連接,并設(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í)間長(zhǎng),開啟新線程

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用來(lái)設(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軟件編程有所幫助。

相關(guān)文章

  • PHP常見算法合集代碼實(shí)例

    PHP常見算法合集代碼實(shí)例

    這篇文章主要介紹了PHP常見算法合集代碼實(shí)例,有對(duì)算法不太了解的同學(xué)可以借鑒參考下
    2021-01-01
  • Yii框架Session與Cookie使用方法示例

    Yii框架Session與Cookie使用方法示例

    這篇文章主要介紹了Yii框架Session與Cookie使用方法,結(jié)合實(shí)例形式分析了Yii框架針對(duì)Session與Cookie的設(shè)置、獲取、刪除等相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • Laravel 重寫日志,讓日志更優(yōu)雅

    Laravel 重寫日志,讓日志更優(yōu)雅

    這篇文章主要介紹了Laravel 重寫日志,讓日志更優(yōu)雅,laravel框架俗稱優(yōu)雅的框架,所以有想對(duì)laravel中的日志重寫使其更加方便的記錄信息獲取信息的同學(xué)可以參考下
    2021-03-03
  • Laravel 5使用Laravel Excel實(shí)現(xiàn)Excel/CSV文件導(dǎo)入導(dǎo)出的功能詳解

    Laravel 5使用Laravel Excel實(shí)現(xiàn)Excel/CSV文件導(dǎo)入導(dǎo)出的功能詳解

    這篇文章主要給大家介紹了關(guān)于在Laravel 5中如何使用Laravel Excel實(shí)現(xiàn)Excel/CSV文件導(dǎo)入導(dǎo)出功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下。
    2017-10-10
  • 服務(wù)器遷移php版本不同可能誘發(fā)的問題

    服務(wù)器遷移php版本不同可能誘發(fā)的問題

    今天在服務(wù)器做了遷移以后,前臺(tái)可以正常顯示和調(diào)用,登陸后臺(tái)顯示500錯(cuò)誤,一般這種情況下都要查看核心跳轉(zhuǎn)文件,經(jīng)查看發(fā)現(xiàn)login.php文件并沒有調(diào)用.因?yàn)檎也坏絣ogin.php文件,那就證明這個(gè)文件里是有語(yǔ)法錯(cuò)誤
    2015-12-12
  • Zend Framework教程之Application和Bootstrap用法詳解

    Zend Framework教程之Application和Bootstrap用法詳解

    這篇文章主要介紹了Zend Framework教程之Application和Bootstrap用法,結(jié)合實(shí)例形式詳細(xì)分析了Application和Bootstrap的功能,使用技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-03-03
  • php for 循環(huán)使用的簡(jiǎn)單實(shí)例

    php for 循環(huán)使用的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇php for 循環(huán)使用的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • PHP實(shí)現(xiàn)新型冠狀病毒疫情實(shí)時(shí)圖的實(shí)例

    PHP實(shí)現(xiàn)新型冠狀病毒疫情實(shí)時(shí)圖的實(shí)例

    在本篇文章小編給大家分享一篇關(guān)于PHP新型冠狀病毒肺炎疫情實(shí)時(shí)圖源碼內(nèi)容,有興趣的朋友們可以本地測(cè)試下。
    2020-02-02
  • Laravel 5框架學(xué)習(xí)之環(huán)境與配置

    Laravel 5框架學(xué)習(xí)之環(huán)境與配置

    本文給大家主要介紹的是Laravel5框架中的環(huán)境配置,給大家詳細(xì)介紹了.env的配置文件,包含的數(shù)據(jù)庫(kù)配置信息的詳細(xì)解釋,這里推薦給大家,有需要的小伙伴參考下。
    2015-04-04
  • PHP的switch判斷語(yǔ)句的“高級(jí)”用法詳解

    PHP的switch判斷語(yǔ)句的“高級(jí)”用法詳解

    這篇文章主要介紹了PHP的switch判斷語(yǔ)句的“高級(jí)”用法詳解,其實(shí)本文講解的還是它的基礎(chǔ)用法,需要的朋友可以參考下
    2014-10-10

最新評(píng)論

松阳县| 张家川| 莎车县| 南澳县| 琼结县| 湘阴县| 井陉县| 合肥市| 威海市| 理塘县| 巍山| 江山市| 句容市| 绥化市| 鞍山市| 固阳县| 长治县| 夏河县| 通江县| 冷水江市| 香港 | 扎鲁特旗| 周口市| 洪雅县| 宿州市| 邓州市| 荆门市| 东辽县| 洛阳市| 佛坪县| 米易县| 肃北| 炎陵县| 虎林市| 砚山县| 安丘市| 宁安市| 都江堰市| 漳浦县| 靖西县| 大足县|