巅云智能建站平台搭建版(创业流派版)火爆上线,毕生受权!新增:文章智能收罗+全站真静态打包+都会分站+智能小法式+不法词过滤+H5自顺应+智能链词等功效功效概况
赞助文档Help

基于PHP背景的Android消息阅读客户端

一佰互联网站建造(www.taishanly.com) 颁布发表日期 2020-04-27 10:44:11 阅读数: 98

本文实例为大师分享了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("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范例的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) ;
}
  
}

此处须要一个东西类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的显现格局

<?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这三者的干系。

以上便是本文的全数内容,但愿对大师进修Android软件编程有所赞助。

一佰互联是天下着名建站品牌办事商,咱们有九年、网站建造、网页设想、php开辟和域名注册及假造主机办事经历,供给的办事更是天下着名。最近几年来还整合团队上风自立开辟了可视化多用户”“3.0平台版,拖拽排版网站建造设想,轻松完成pc站、手机微网站、小法式、APP一体化全网营销网站扶植 ,已胜利的为天下上百家收集公司供给自助建站平台搭建办事。

相干消息more

26
04月
php微信公家号开辟(4)php完成自界说关

咱们晓得,微信公家号开辟分定阅号和办事号,而小我只能请求定阅号,定阅号不能设置菜单,有形中只能经由进程关头字答复完成,比方我答复赞助,就前往赞助... >>概况

03
05月
甚么是网站优化?企业为甚么要做网站优化?它有

企业为甚么要做网站优化?良多站长都只是传闻网站优化、搜刮引擎优化,可是都不晓得为甚么要做这些,做这些对网站有哪些益处?本文将具体为大师先容,... >>概况

17
04月
爱奇艺与阿里旗下天弘基金签和谈 告竣天下杯合

凉茶品牌加多宝、阿里巴巴旗下天弘基金与爱奇艺签订协作和谈,颁布发表成为爱奇艺2014巴西天下杯计谋协作火伴。据先容,两边将环绕及时赛事、足球... >>概况

02
05月
让用户加倍信赖咱们的网站的体例

若何让用户加倍信赖咱们的网站?网站扶植胜利的一个主要身分是被其用户所信赖,在取得了用户的信赖的条件下,企业能力经由进程网站扶植为本身带来更多的订... >>概况

高端网站扶植

美工统筹SEO,为企业电子商务营销助力!

德律风:

023-85725751
建站

产物

域名注册 假造主机 云办事器 企业邮局
智能建站 APP打包 微站/小法式 创业平台
网站推行 媒体营销 智能收罗 AI机械人
400德律风 短信营销 店销机械人
私家定制 流派网站