基于PHP后台的Android新闻浏览客户端
本文实例为大家分享了Android新闻浏览客户端,基于php后台,供大家参考,具体内容如下 1、使用HBuilder进行PHP环境配置,测试是否可以查询MySQL语句,之前都已经详细说明过了。 2、此处php后台实现mysql的查询功能,并以JSON数据格式返回个客户端 在PHP此处建立一个mysql_connect.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){ mysql_select_db("newsdemo",$con); 然后新建一个getNewsJSON.php文件用于进行将查询结果转换成JSON字符串格式。只需要 json_encode这个方法即可。 /*获得JSON数据
require 'mysql_connect.php'; $n = 0; //数组转化为JSON字符串 重点在于Android端的设计开发 1、设计界面 由于需要以在ListView的每个Item中设置相同的格式,所以此处运用ListView+Adapter的形式 在主界面LinearLayout中添加一个ListView控件 2、Mainactivity程序如下: <div class="jb51code"> private ListView lvNews ; //获取json字符串的URL地址 //获取msg之后如何处理 } ; @Override
} @Override @Override } 此处需要一个工具类HttpUtils以及自定义的NewsAdapter以实现item的视图显示. HttpUtils代码如下: 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() ; } } NewsAdapter代码如下: 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 public NewsAdapter(Context context,List 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用来设置每个item的显示格式 <ImageView <TextView <TextView 注意:此item中需要显示单个图片,所以用到Bitmap这个类。由于用到网络传输,所以需要用到线程这个概念!! 关键理解handler message以及loop这三者的关系。 以上就是本文的全部内容,希望对大家学习Android软件编程有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |