Android news browsing client based on PHP background, php background android news_PHP tutorial

WBOY
Release: 2016-07-12 08:50:39
Original
896 people have browsed it

Android news browsing client based on PHP background, php background android news

The example in this article shares with you the Android news browsing client, based on php background, for your reference, specific The content is as follows

1. Use HBuilder to configure the PHP environment and test whether the MySQL statement can be queried. This has been explained in detail before.

2. Here the php background implements the query function of mysql and returns a client in JSON data format

Create a mysql_connect.php file here in PHP to connect to the database and set the character set format.

<&#63;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);
&#63;>

Copy after login

Then create a new getNewsJSON.php file to convert the query results into JSON string format. Only the json_encode method is needed.

<&#63;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);
&#63;>

Copy after login

The focus is on the design and development of the Android side

1. Design interface

Since the same format needs to be set in each Item of the ListView, the ListView Adapter is used here

Add a ListView control in the main interface LinearLayout

2. Mainactivity program is as follows:

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<&#63;> 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) ;
}
  
}

Copy after login

A tool class HttpUtils and a custom NewsAdapter are needed here to realize the view display of the item.

HttpUtils code is as follows:

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

}

}



Copy after login

NewsAdapter code is as follows:

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;

}





}

Copy after login

news_item is used to set the display format of each item

<&#63;xml version="1.0" encoding="utf-8"&#63;>
<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>

Copy after login

Note: This item needs to display a single image, so the Bitmap class is used. Since network transmission is used, the concept of threads needs to be used! !

The key is to understand the relationship between handler message and loop.

The above is the entire content of this article. I hope it will be helpful to everyone in learning Android software programming.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/1133098.htmlTechArticleAndroid news browsing client based on PHP background, php background android news example in this article shares with everyone the Android news browsing client End, based on php background, for your reference, the specific content is as follows...
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template