Heim Backend-Entwicklung PHP-Tutorial Implementierung eines Android-News-Browsing-Clients basierend auf PHP-Hintergrund

Implementierung eines Android-News-Browsing-Clients basierend auf PHP-Hintergrund

Jun 02, 2018 am 10:27 AM
android php 新闻

Dieser Artikel stellt hauptsächlich die Implementierung des Android-News-Browsing-Clients basierend auf PHP-Hintergrund vor. Interessierte Freunde können sich darauf beziehen.

1. Verwenden Sie HBuilder für die PHP-Umgebung MySQL-Anweisungen, die abgefragt werden können, wurden bereits ausführlich erläutert.

2. Hier implementiert der PHP-Hintergrund die Abfragefunktion von MySQL und gibt einen Client im JSON-Datenformat zurück

Erstellen Sie hier eine mysql_connect.php-Datei in PHP, um die Datenbankverbindung zu realisieren und den Zeichensatz festzulegen Format.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<?php

 

$con = mysql_connect("localhost","root","123456");

//设置字符集为UTF-8 可解决中文乱码

mysql_query("SET NAMES &#39;utf8&#39;");

mysql_query("SET CHARACTER SET utf8");

mysql_query("SET CHARACTER_SET_RESULT=utf8");

 

if(!$con){

die(mysql_error());

}

 

mysql_select_db("newsdemo",$con);

?>

Nach dem Login kopieren

Erstellen Sie dann eine neue getNewsJSON.php-Datei, um die Abfrageergebnisse in das JSON-String-Format zu konvertieren. Es wird nur die Methode json_encode benötigt.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<?php

 

/*获得JSON数据

 * 返回值:title desc time content_url pic_url*/

  

 require &#39;mysql_connect.php&#39;;

 

$n = 0;

$result = mysql_query("select * from news");

while($row = mysql_fetch_array($result)){

$arr[$n++] = array(

"title"=>$row[&#39;title&#39;],

"desc"=>$row[&#39;desc&#39;],

"time"=>$row[&#39;time&#39;],

"content_url"=>$row[&#39;content_url&#39;],

"pic_url"=>$row[&#39;pic_url&#39;]

);

}

 

//数组转化为JSON字符串

echo json_encode($arr);

?>

Nach dem Login kopieren

Der Schwerpunkt liegt auf dem Design und der Entwicklung der Android-Seite

1. Design-Schnittstelle

Da es notwendig ist, in jedem Element von ListView das gleiche Format festzulegen, Hier wird ListView+ verwendet. Die Form des Adapters

Fügen Sie ein ListView-Steuerelement in der Hauptschnittstelle LinearLayout hinzu

2 Das Mainactivity-Programm lautet wie folgt:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

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

}

   

}

Nach dem Login kopieren

Hier benötigen Sie ein Tool Klasse HttpUtils und ein angepasster NewsAdapter zum Implementieren der Ansichtsanzeige des Elements

HttpUtils-Code lautet wie folgt:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

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

 

}

 

}

Nach dem Login kopieren

NewsAdapter-Code lautet wie folgt:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

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;

 

}

 

 

 

 

 

}

Nach dem Login kopieren

news_item wird verwendet um das Anzeigeformat für jedes Element festzulegen

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

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

Nach dem Login kopieren

Hinweis: Dieses Element muss ein einzelnes Bild anzeigen, daher wird die Bitmap-Klasse verwendet. Da die Netzwerkübertragung verwendet wird, muss das Thread-Konzept verwendet werden! !

Der Schlüssel liegt darin, die Beziehung zwischen Handler-Nachricht und Schleife zu verstehen.

Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird.

Verwandte Empfehlungen:

So implementieren Sie einfache Verschlüsselungstechnologie in PHP

Einfacher Implementierungscode für die Gästebuchfunktion von PHP

Teilen von Beispielen für die PHP-Implementierung der Avatar-Änderungsfunktion für mehrere Benutzer

Das obige ist der detaillierte Inhalt vonImplementierung eines Android-News-Browsing-Clients basierend auf PHP-Hintergrund. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Xiaomi Redmi Note 14 Pro Plus erscheint als erstes Qualcomm Snapdragon 7s Gen 3 Smartphone mit Light Hunter 800 Kamera Xiaomi Redmi Note 14 Pro Plus erscheint als erstes Qualcomm Snapdragon 7s Gen 3 Smartphone mit Light Hunter 800 Kamera Sep 27, 2024 am 06:23 AM

Das Redmi Note 14 Pro Plus ist nun offiziell als direkter Nachfolger des letztjährigen Redmi Note 13 Pro Plus (aktuell 375 $ bei Amazon) erhältlich. Wie erwartet steht das Redmi Note 14 Pro Plus neben dem Redmi Note 14 und dem Redmi Note 14 Pro an der Spitze der Redmi Note 14-Serie. Li

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

Das Design des Oppo Find X8 sieht auf ersten Bildern wie eine Kreuzung zwischen Apple iPhone 16 Pro und OnePlus Open aus Das Design des Oppo Find X8 sieht auf ersten Bildern wie eine Kreuzung zwischen Apple iPhone 16 Pro und OnePlus Open aus Sep 28, 2024 am 06:04 AM

In der Vergangenheit hat Oppo seine Flaggschiff-Serie „Find X“ im späten Winter oder frühen Frühling aktualisiert, mit Ausnahme des ursprünglichen Find an dieser Stelle. H

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

iQOO Z9 Turbo+ debütiert als Dimensity 9300+-Smartphone mit „außergewöhnlicher' Akkulaufzeit iQOO Z9 Turbo+ debütiert als Dimensity 9300+-Smartphone mit „außergewöhnlicher' Akkulaufzeit Sep 26, 2024 am 06:20 AM

Das Z9 Turbo+ ist jetzt im chinesischen Online-Shop von Vivo für 2.199 Yuan (~313 US-Dollar) für ein Basismodell mit 12 GB RAM/256 GB internem Speicher erhältlich, während das RedmiK70 Extreme Edition mit der gleichen Konfiguration bei 2.599 Yuan (~370 US-Dollar) startete: Tatsächlich ist es so newiQ

Die Samsung Galaxy Z Fold Special Edition soll Ende Oktober erscheinen, da ein widersprüchlicher Name auftaucht Die Samsung Galaxy Z Fold Special Edition soll Ende Oktober erscheinen, da ein widersprüchlicher Name auftaucht Oct 01, 2024 am 06:21 AM

Die Einführung des lang erwarteten faltbaren „Special Edition“-Modells von Samsung hat eine weitere Wendung genommen. In den letzten Wochen verliefen die Gerüchte um die sogenannte Galaxy Z Fold Special Edition eher ruhig. Stattdessen hat sich der Fokus auf die Galaxy S25-Serie verlagert, darunter

See all articles