蝙蝠岛资源网 Design By www.hbtsch.com
本文实例为大家分享了Android新闻浏览客户端,基于php后台,供大家参考,具体内容如下
1、使用HBuilder进行PHP环境配置,测试是否可以查询MySQL语句,之前都已经详细说明过了。
2、此处php后台实现mysql的查询功能,并以JSON数据格式返回个客户端
在PHP此处建立一个mysql_connect.php文件,实现数据库的连接,并设置字符集格式。
<"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);
"htmlcode">
<"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);
"htmlcode">
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<"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(){
@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代码如下:
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;
}
}
news_item用来设置每个item的显示格式
<"1.0" encoding="utf-8""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="/UploadFiles/2021-04-02/ic_launcher">
注意:此item中需要显示单个图片,所以用到Bitmap这个类。由于用到网络传输,所以需要用到线程这个概念!!
关键理解handler message以及loop这三者的关系。
以上就是本文的全部内容,希望对大家学习Android软件编程有所帮助。
蝙蝠岛资源网 Design By www.hbtsch.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
蝙蝠岛资源网 Design By www.hbtsch.com
暂无基于PHP后台的Android新闻浏览客户端的评论...
更新日志
2025年10月27日
2025年10月27日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]