《PHP编程:基于PHP后台的Android新闻浏览客户端》要点:
本文介绍了PHP编程:基于PHP后台的Android新闻浏览客户端,希望对您有用。如果有疑问,可以联系我们。
PHP应用本文实例为大家分享了Android新闻浏览客户端,基于php后台,供大家参考,具体内容如下
PHP应用1、使用HBuilder进行PHP环境配置,测试是否可以查询MySQL语句,之前都已经详细说明过了.
PHP应用2、此处php后台实现mysql的查询功能,并以JSON数据格式返回个客户端
PHP应用在PHP此处建立一个mysql_connect.php文件,实现数据库的连接,并设置字符集格式.
- PHP应用
- <?php
- $con = mysql_connect("localhost","root","123456");
- //设置字符集为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);
- ?>
PHP应用然后新建一个getNewsJSON.php文件用于进行将查询结果转换成JSON字符串格式.只需要 json_encode这个方法即可.
- PHP应用
- <?php
- /*获得JSON数据
- * 返回值: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']
- );
- }
- //数组转化为JSON字符串
- echo json_encode($arr);
- ?>
PHP应用重点在于Android端的设计开发
PHP应用1、设计界面
PHP应用由于需要以在ListView的每个Item中设置相同的格式,所以此处运用ListView+Adapter的形式
PHP应用在主界面LinearLayout中添加一个ListView控件
PHP应用2、Mainactivity程序如下:
- PHP应用
- 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一个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) ;
- }
- }
PHP应用此处需要一个工具类HttpUtils以及自定义的NewsAdapter以实现item的视图显示.
PHP应用HttpUtils代码如下:
- PHP应用
- 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 {
- //工具类直接定义成静态方法即可
- /*url用于内部类中,所以要将其设定为final类型*/
- /*读取完成需要通知主线程,需要使用handler*/
- public static void getNewsJSON(final String url,final Handler handler){
- //访问网络,时间长,开启新线程
- 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() ;
- //读取数据用缓冲,里面要传入一个reader
- BufferedReader reader = new BufferedReader(new InputStreamReader(is));
- //一行一行读取数据
- String line = "";
- //没读完一行进行拼接,高效
- StringBuilder result = new StringBuilder();
- while((line = reader.readLine()) != null){
- result.append(line);
- }
- Message msg = new Message() ;
- //msg.obj可以放进去任何对象
- 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() ;
- }
- }
PHP应用NewsAdapter代码如下:
- PHP应用
- 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 {
- //声明上下文对象,后面的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;
- }
- }
PHP应用news_item用来设置每个item的显示格式
- PHP应用
- <?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>
PHP应用注意:此item中需要显示单个图片,所以用到Bitmap这个类.由于用到网络传输,所以需要用到线程这个概念!!
PHP应用关键理解handler message以及loop这三者的关系.
PHP应用以上就是本文的全部内容,希望对大家学习Android软件编程有所帮助.
转载请注明本页网址:
http://www.vephp.com/jiaocheng/6343.html