基于PHP后台的Android新闻浏览客户端.docx

上传人:b****0 文档编号:17611973 上传时间:2023-07-27 格式:DOCX 页数:11 大小:17.62KB
下载 相关 举报
基于PHP后台的Android新闻浏览客户端.docx_第1页
第1页 / 共11页
基于PHP后台的Android新闻浏览客户端.docx_第2页
第2页 / 共11页
基于PHP后台的Android新闻浏览客户端.docx_第3页
第3页 / 共11页
基于PHP后台的Android新闻浏览客户端.docx_第4页
第4页 / 共11页
基于PHP后台的Android新闻浏览客户端.docx_第5页
第5页 / 共11页
基于PHP后台的Android新闻浏览客户端.docx_第6页
第6页 / 共11页
基于PHP后台的Android新闻浏览客户端.docx_第7页
第7页 / 共11页
基于PHP后台的Android新闻浏览客户端.docx_第8页
第8页 / 共11页
基于PHP后台的Android新闻浏览客户端.docx_第9页
第9页 / 共11页
基于PHP后台的Android新闻浏览客户端.docx_第10页
第10页 / 共11页
基于PHP后台的Android新闻浏览客户端.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于PHP后台的Android新闻浏览客户端.docx

《基于PHP后台的Android新闻浏览客户端.docx》由会员分享,可在线阅读,更多相关《基于PHP后台的Android新闻浏览客户端.docx(11页珍藏版)》请在冰点文库上搜索。

基于PHP后台的Android新闻浏览客户端.docx

基于PHP后台的Android新闻浏览客户端

基于PHP后台的Android新闻浏览客户端

本文实例为大家分享了Android新闻浏览客户端,基于php后台,供大家参考,具体内容如下

1、使用HBuilder进行PHP环境配置,测试是否可以查询MySQL语句,之前都已经详细说明过了。

2、此处php后台实现mysql的查询功能,并以JSON数据格式返回个客户端

在PHP此处建立一个mysql_connect.php文件,实现数据库的连接,并设置字符集格式。

php

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

//设置字符集为UTF-8可解决中文乱码

mysql_query("SETNAMES'utf8'");

mysql_query("SETCHARACTERSETutf8");

mysql_query("SETCHARACTER_SET_RESULT=utf8");

if(!

$con){

die(mysql_error());

}

mysql_select_db("newsdemo",$con);

?

>

然后新建一个getNewsJSON.php文件用于进行将查询结果转换成JSON字符串格式。

只需要json_encode这个方法即可。

php

/*获得JSON数据

*返回值:

titledesctimecontent_urlpic_url*/

require'mysql_connect.php';

$n=0;

$result=mysql_query("select*fromnews");

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']

);

}

//数组转化为JSON字符串

echo$arr);

?

>

重点在于Android端的设计开发

1、设计界面

由于需要以在ListView的每个Item中设置相同的格式,所以此处运用ListView+Adapter的形式

在主界面LinearLayout中添加一个ListView控件

2、Mainactivity程序如下:

publicclassMainActivityextendsActivityimplementsOnItemClickListener{

privateListViewlvNews;

privateNewsAdapteradapter;

//定义集合

privateListnewsList;

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

publicstaticfinalStringGET_NEWS_URL="http:

//211.87.234.20/NewsDemo/getNewsJSON.php";

//获取msg之后如何处理

privateHandlergetNewsHandler=newHandler(){

publicvoidhandleMessage(android.os.Messagemsg){

StringjsonData=(String)msg.obj;

System.out.println(jsonData);

try{

JSONArrayjsonArray=newJSONArray(jsonData);

for(inti=0;i

JSONObjectobject=jsonArray.getJSONObject(i);

String

};

};

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

lvNews=(ListView)findViewById(R.id.lvNews);

//初始化

newsList=newArrayList();

adapter=newNewsAdapter(this,newsList);

lvNews.setAdapter(adapter);

lvNews.setOnItemClickListener(this);

HttpUtils.getNewsJSON(GET_NEWS_URL,getNewsHandler);

}

@Override

publicbooleanonCreateOptionsMenu(Menumenu){

//Inflatethemenu;thisaddsitemstotheactionbarifitispresent.

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

returntrue;

}

@Override

publicvoidonItemClick(AdapterView

>arg0,Viewarg1,intposition,longarg3){

//TODOAuto-generatedmethodstub

Newsnews=newsList.get(position);

Intentintent=newIntent(this,BrowseNewsActivity.class);

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

startActivity(intent);

}

}

此处需要一个工具类HttpUtils以及自定义的NewsAdapter以实现item的视图显示.

HttpUtils代码如下:

packagecom.MR.news.utils;

importjava.io.BufferedReader;

importjava.io.InputStream;

importjava.io.InputStreamReader;

import.HttpURLConnection;

import.URL;

importandroid.graphics.Bitmap;

importandroid.graphics.BitmapFactory;

importandroid.os.Handler;

importandroid.os.Message;

importandroid.widget.ImageView;

publicclassHttpUtils{

//工具类直接定义成静态方法即可

/*url用于内部类中,所以要将其设定为final类型*/

/*读取完成需要通知主线程,需要使用handler*/

publicstaticvoidgetNewsJSON(finalStringurl,finalHandlerhandler){

//访问网络,时间长,开启新线程

newThread(newRunnable(){

@Override

publicvoidrun(){

//TODOAuto-generatedmethodstub

HttpURLConnectionconn;

InputStreamis;

try{

conn=(HttpURLConnection)newURL(url).openConnection();

//GET方式获取

conn.setRequestMethod("GET");

//得到输入流

is=conn.getInputStream();

//读取数据用缓冲,里面要传入一个reader

BufferedReaderreader=newBufferedReader(newInputStreamReader(is));

//一行一行读取数据

Stringline="";

//没读完一行进行拼接,高效

StringBuilderresult=newStringBuilder();

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

=null){

result.append(line);

}

Messagemsg=newMessage();

//msg.obj可以放进去任何对象

msg.obj=result.toString();

handler.sendMessage(msg);

}catch(Exceptione){

e.printStackTrace();

}

}}).start();

}

publicstaticvoidsetPicBitMap(finalImageViewivPic,finalStringpic_url){

newThread(newRunnable(){

@Override

publicvoidrun(){

//TODOAuto-generatedmethodstub

try{

HttpURLConnectionconn=(HttpURLConnection)newURL(pic_url).openConnection();

conn.connect();

InputStreamis=conn.getInputStream();

//bitmap就是所需图片资源

/*从资源文件中的到图片*/

Bitmapbitmap=BitmapFactory.decodeStream(is);

ivPic.setImageBap(bitmap);

is.close();

}catch(Exceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

}).start();

}

}

NewsAdapter代码如下:

packagecom.MR.news.adapter;

importjava.util.List;

importcom.MR.news.R;

importcom.MR.news.model.News;

importcom.MR.news.utils.HttpUtils;

importandroid.content.Context;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.BaseAdapter;

importandroid.widget.ImageView;

importandroid.widget.TextView;

publicclassNewsAdapterextendsBaseAdapter{

//声明上下文对象,后面的getView方法需要

privateContextcontext;

privateListnewsList;

publicNewsAdapter(Contextcontext,ListnewsList){

this.context=context;

this.newsList=newsList;

}

@Override

publicintgetCount(){

//TODOAuto-generatedmethodstub

returnnewsList.size();

}

@Override

publicObjectgetItem(intposition){

//TODOAuto-generatedmethodstub

returnnewsList.get(position);

}

@Override

publiclonggetItemId(intposition){

//TODOAuto-generatedmethodstub

returnposition;

}

@Override

publicViewgetView(intposition,ViewconvertView,ViewGrouparg2){

//TODOAuto-generatedmethodstub

if(convertView==null){

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

}

TextViewtvTitle=(TextView)convertView.findViewById(R.id.tvTitle);

TextViewtvDesc=(TextView)convertView.findViewById(R.id.tvDesc);

TextViewtvTime=(TextView)convertView.findViewById(R.id.tvTime);

ImageViewivPic=(ImageView)convertView.findViewById(R.id.ivPic);

Newsnews=newsList.get(position);

tvTitle.setText(news.getTitle());

tvDesc.setText(news.getDesc());

tvTime.setText(news.getTime());

Stringpic_url=news.getPic_url();

HttpUtils.setPicBitMap(ivPic,pic_url);

returnconvertView;

}

}

news_item用来设置每个item的显示格式

xmlversion="1.0"encoding="utf-8"?

>

android="

android:

layout_width="match_parent"

android:

layout_height="match_parent">

android:

id="@+id/ivPic"

android:

layout_width="42dp"

android:

layout_height="42dp"

android:

src="@drawable/ic_launcher"

/>

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

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

android:

id="@+id/tvTime"

android:

layout_width="wrap_content"

android:

layout_height="wrap_content"

android:

layout_alignParentRight="true"

android:

text="time"

android:

textSize="10sp"

/>

注意:

此item中需要显示单个图片,所以用到Bitmap这个类。

由于用到网络传输,所以需要用到线程这个概念!

关键理解handlermessage以及loop这三者的关系。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2