• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

基于PHP后端实现Android客户端新闻浏览

php 搞代码 3年前 (2022-01-22) 34次浏览 已收录 0个评论

本文主要为大家详细介绍了基于PHP后台的Android新闻浏览客户端,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。希望对大家有所帮助。

具体内容如下

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

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

在PHP此处建立一个mysql_connect.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);?>

然后新建一个getNewsJSON.php文件用于进行将查询结果转换成JSON字符串格式。只需要 json_encode这个方法即可。

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

重点在于Android端的设计开发

1、设计界面

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

在主界面LinearLayout中添加一个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一个News类型的ObjectnewsList.add(new News(title,desc,time,content_url,pic_url)) ;}//通知更新adapter.notifyDataSetChanged() ;} catch (JSONException e) {// TODO Auto-generated catch blocke.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;  }@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {// TODO Auto-generated method stubNews news = newsList.get(position) ;Intent intent = new Intent(this,BrowseNewsActivity.class) ;intent.putExtra("content_url",news.getContent_url()) ;startActivity(intent) ;}  }

此处需要一个工具类HttpUtils以及自定义的NewsAdapter以实现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 {//工具类直接定义成静态方法即可/*url用于内部类中,所以要将其设定为final类型*//*读取完成需要通知主线程,需要使用handler*/public static void getNewsJSON(final String url,final Handler handler){//访问网络,时间长,开启新线程new Thread(new Runnable(){@Overridepublic void run() {// TODO Auto-generated method stubHttpURLConnection conn ;InputStream is ;try {conn = (HttpURLConnection) new URL(url).openConnection() ;//GET方式获取conn.setRequestMethod("GET") ;//得到输入流is=conn.getInputStream() ;//读取数据用缓冲,里面要传入一个readerBufferedReader 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(){@Overridepublic void run() {// TODO Auto-generated method stubtry {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 blocke.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 {//声明上下文对象,后面的getView方法需要private Context context;private List<News> newsList;public NewsAdapter(Context context, List<News> newsList){this.context = context ;this.newsList = newsList ;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn newsList.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn newsList.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup arg2) {// TODO Auto-generated method stubif(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(<p>4本文¥来源gao!%daima.com搞$代*!码$网9</p><pre>搞代gaodaima码

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的显示格式

<?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中需要显示单个图片,所以用到Bitmap这个类。由于用到网络传输,所以需要用到线程这个概念!!

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

相关推荐:

PHP API获取天气预报,以及使用飞信API,给好友发_PHP教程

小白php API初体验 php api文档 php api接口开发 php web ap

nginx 配置ajax跨域访问php api

以上就是基于PHP后端实现Android客户端新闻浏览的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:基于PHP后端实现Android客户端新闻浏览

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址