


Implementing Android news browsing client based on PHP background
This article mainly introduces in detail the implementation of Android news browsing client based on PHP background, which has certain reference value. Interested friends can refer to
1. Use HBuilder for PHP environment Configuration and testing whether MySQL statements can be queried have been explained in detail before.
2. The PHP background here implements the query function of mysql and returns a client in JSON data format.
Create a mysql_connect.php file here in PHP to realize the database connection and Set character set format.
<?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); ?>
Then create a new getNewsJSON.php file to convert the query results into JSON string format. Only the json_encode method is needed.
<?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); ?>
The focus is on the design and development of the Android side
1. Design interface
Since it is necessary to set the same format in each Item of the ListView, the ListView Adapter is used here The form
Add a ListView control in the main interface LinearLayout
2. The 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<?> 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) ; } }
A tool class HttpUtils and a custom NewsAdapter are required here to implement The view display of 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() ; } }
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; } }
news_item is used to set the display format of each 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>
Note: This item needs to display a single image, so the Bitmap class is used. Since network transmission is used, the concept of thread needs to be used! !
The key is to understand the relationship between handler message and loop.
Summary: The above is the entire content of this article, I hope it will be helpful to everyone's study.
Related recommendations:
How to implement simple encryption technology in PHP
PHP simple guestbook function implementation code
PHP Sharing Examples of Implementing the Avatar Changing Function for Multiple Users
The above is the detailed content of Implementing Android news browsing client based on PHP background. For more information, please follow other related articles on the PHP Chinese website!

PHPsessionstrackuserdataacrossmultiplepagerequestsusingauniqueIDstoredinacookie.Here'showtomanagethemeffectively:1)Startasessionwithsession_start()andstoredatain$_SESSION.2)RegeneratethesessionIDafterloginwithsession_regenerate_id(true)topreventsessi

In PHP, iterating through session data can be achieved through the following steps: 1. Start the session using session_start(). 2. Iterate through foreach loop through all key-value pairs in the $_SESSION array. 3. When processing complex data structures, use is_array() or is_object() functions and use print_r() to output detailed information. 4. When optimizing traversal, paging can be used to avoid processing large amounts of data at one time. This will help you manage and use PHP session data more efficiently in your actual project.

The session realizes user authentication through the server-side state management mechanism. 1) Session creation and generation of unique IDs, 2) IDs are passed through cookies, 3) Server stores and accesses session data through IDs, 4) User authentication and status management are realized, improving application security and user experience.

Tostoreauser'snameinaPHPsession,startthesessionwithsession_start(),thenassignthenameto$_SESSION['username'].1)Usesession_start()toinitializethesession.2)Assigntheuser'snameto$_SESSION['username'].Thisallowsyoutoaccessthenameacrossmultiplepages,enhanc

Reasons for PHPSession failure include configuration errors, cookie issues, and session expiration. 1. Configuration error: Check and set the correct session.save_path. 2.Cookie problem: Make sure the cookie is set correctly. 3.Session expires: Adjust session.gc_maxlifetime value to extend session time.

Methods to debug session problems in PHP include: 1. Check whether the session is started correctly; 2. Verify the delivery of the session ID; 3. Check the storage and reading of session data; 4. Check the server configuration. By outputting session ID and data, viewing session file content, etc., you can effectively diagnose and solve session-related problems.

Multiple calls to session_start() will result in warning messages and possible data overwrites. 1) PHP will issue a warning, prompting that the session has been started. 2) It may cause unexpected overwriting of session data. 3) Use session_status() to check the session status to avoid repeated calls.

Configuring the session lifecycle in PHP can be achieved by setting session.gc_maxlifetime and session.cookie_lifetime. 1) session.gc_maxlifetime controls the survival time of server-side session data, 2) session.cookie_lifetime controls the life cycle of client cookies. When set to 0, the cookie expires when the browser is closed.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

Atom editor mac version download
The most popular open source editor

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

SublimeText3 English version
Recommended: Win version, supports code prompts!

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.
