亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統(tǒng) > Android > 正文

android+json+php+mysql實(shí)現(xiàn)用戶反饋功能方法解析

2020-04-11 12:42:23
字體:
供稿:網(wǎng)友
相信每個項目都會有用戶反饋建議等功能,這個實(shí)現(xiàn)的方法很多,下面是我實(shí)現(xiàn)的方法,供大家交流。首先看具體界面,三個字段。名字,郵箱為選填,可以為空,建議不能為空。如有需要可以給我留言。
 
下面貼出布局代碼,這里用到一個<include layout="@layout/uphead">就是把另外一個布局文件引入到這個布局中。
復(fù)制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/bg_gray" >
<include layout="@layout/uphead"/>
<!-- Name Label -->
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="名字(選填)"
android:paddingLeft="10dip"
android:paddingRight="10dip"
android:textColor="@color/coffee"
android:paddingTop="10dip"
android:textSize="12sp"/>
<!-- Input Name -->
<EditText android:id="@+id/inputName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="5dip"
android:layout_marginBottom="15dip"
android:singleLine="true"/>
<!-- Price Label -->
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="郵箱(選填)"
android:paddingLeft="10dip"
android:paddingRight="10dip"
android:textColor="@color/coffee"
android:paddingTop="10dip"
android:textSize="12sp"/>
<!-- Input Price -->
<EditText android:id="@+id/inputEmail"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="5dip"
android:layout_marginBottom="15dip"
android:singleLine="true"/>
<!-- Description Label -->
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="建議(必填)"
android:paddingLeft="10dip"
android:paddingRight="10dip"
android:paddingTop="10dip"
android:textColor="@color/coffee"
android:textSize="12sp"/>
<!-- Input description -->
<EditText android:id="@+id/inputDesc"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="5dip"
android:layout_marginBottom="15dip"
android:lines="4"
android:gravity="top"/>
<!-- Button Create Product -->
<Button android:id="@+id/btnCreateProduct"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="提交"
android:textSize="20sp"
android:textColor="@color/coffee"
/>
</LinearLayout>

下面貼出uphead的布局代碼,里面用到一個TextView,一個Button為返回按鈕。
復(fù)制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="@drawable/top" >
<TextView
android:id="@+id/tv_head"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:shadowColor="#ff000000"
android:shadowDx="2"
android:shadowDy="0"
android:shadowRadius="1"
android:text=""
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold" />
<Button
android:id="@+id/upback"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="17dp"
android:drawableLeft="@id/tv_head"
android:background="@drawable/back" />
</RelativeLayout>

下面貼出android客戶端代碼,三個類,一個用于與服務(wù)器交互發(fā)送post請求,以及json的傳遞。還有一個Dailog實(shí)例。
復(fù)制代碼 代碼如下:

package com.android.up;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONObject;
import com.android.MainActivity;
import com.android.R;
import com.anroid.net.DialogUtil;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class up extends Activity {
// Progress Dialog
private ProgressDialog pDialog;
private TextView tv_head;
JSONParser jsonParser = new JSONParser();
EditText inputName;
EditText inputEmail;
EditText inputDesc;
Button upback;
// url to create new product
private static String url_up = "http://10.0.2.2/up/up.php";//此處寫的是你的服務(wù)器端的地址
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.up);
tv_head = (TextView)findViewById(R.id.tv_head);
tv_head.setText("建議");
// Edit Text
inputName = (EditText) findViewById(R.id.inputName);
inputEmail = (EditText) findViewById(R.id.inputEmail);
inputDesc = (EditText) findViewById(R.id.inputDesc);
upback = (Button)findViewById(R.id.upback);
upback.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent back = new Intent(up.this,MainActivity.class);
back.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(back);
up.this.finish();
}
});
// Create button
Button btnCreateProduct = (Button) findViewById(R.id.btnCreateProduct);
// button click event
btnCreateProduct.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
// creating new product in background thread
if(validate()){
new Up().execute();
}
}
});
}
private boolean validate()
{
String description = inputDesc.getText().toString().trim();
if (description.equals(""))
{
DialogUtil.showDialog(this, "您還沒有填寫建議", false);
return false;
}
return true;
}
/**
* Background Async Task to Create new product
* */
class Up extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(up.this);
pDialog.setMessage("正在上傳..");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
/**
* Creating product
* */
protected String doInBackground(String... args) {
String name = inputName.getText().toString();
String price = inputEmail.getText().toString();
String description = inputDesc.getText().toString();
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("name", name));
params.add(new BasicNameValuePair("email", price));
params.add(new BasicNameValuePair("description", description));
// getting JSON Object
// Note that create product url accepts POST method
try{
JSONObject json = jsonParser.makeHttpRequest(url_up,
"POST", params);
}catch(Exception e){
e.printStackTrace();
}
// check for success tag
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
pDialog.setMessage("上傳成功");
pDialog.dismiss();

}
}
}

下面貼出Dailog實(shí)例類
復(fù)制代碼 代碼如下:

/**
*
*/
package com.anroid.net;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.view.View;
import android.app.Activity;
public class DialogUtil
{
// 定義一個顯示消息的對話框
public static void showDialog(final Context ctx
, String msg , boolean closeSelf)
{
// 創(chuàng)建一個AlertDialog.Builder對象
AlertDialog.Builder builder = new AlertDialog.Builder(ctx)
.setMessage(msg).setCancelable(false);
if(closeSelf)
{
builder.setPositiveButton("確定", new OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
// 結(jié)束當(dāng)前Activity
((Activity)ctx).finish();
}
});
}
else
{
builder.setPositiveButton("確定", null);
}
builder.create().show();
}
// 定義一個顯示指定組件的對話框
public static void showDialog(Context ctx , View view)
{
AlertDialog.Builder builder = new AlertDialog.Builder(ctx)
.setView(view).setCancelable(false)
.setPositiveButton("確定", null);
builder.create()
.show();
}
}

剩下就是如何與服務(wù)器端交互了不多說,代碼如下
復(fù)制代碼 代碼如下:

package com.android.up;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HTTP;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
// function get json from url
// by making HTTP POST
public JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {
// Making HTTP request
try {
// request method is POST
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "UTF-8"));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "/n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
Log.d("json", json.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}

到此android客戶端已經(jīng)完成,后天服務(wù)器端用php+mysql實(shí)現(xiàn),當(dāng)然這里只是個實(shí)例,存取到數(shù)據(jù)庫里面,沒有進(jìn)行展示,代碼如下
復(fù)制代碼 代碼如下:

<?php
// array for JSON response
$response = array();
include("conn.php");
// check for required fields
if (isset($_POST['name']) && isset($_POST['email']) && isset($_POST['description'])) {
$name = $_POST['name'];
$price = $_POST['email'];
$description = $_POST['description'];
$result = mysql_query("INSERT INTO up(name, email, description) VALUES('$name', '$email', '$description')");
echo $result;
// check if row inserted or not
if ($result) {
// successfully inserted into database
$response["success"] = 1;
$response["message"] = "Product successfully created.";
// echoing JSON response
echo json_encode($response);
} else {
// failed to insert row
$response["success"] = 0;
$response["message"] = "Oops! An error occurred.";
// echoing JSON response
echo json_encode($response);
}
} else {
// required field is missing
$response["success"] = 0;
$response["message"] = "Required field(s) is missing";
// echoing JSON response
echo json_encode($response);
}
?>

數(shù)據(jù)庫表結(jié)構(gòu)如下,連接數(shù)據(jù)庫代碼就不貼出了,記得把編碼設(shè)置為UTF-8就行了。


到此就完成了一個用戶反饋的基本功能,后臺數(shù)據(jù)里展示。如有問題歡迎給我留言。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
中文字幕av一区 二区| 成人h视频在线观看播放| 这里只有精品66| 大色综合视频网站在线播放| 精品国产一区一区二区三亚瑟| 欧美日韩一级在线| 国产一区二区在线观看视频| 性欧美videoshd高清| 欧洲亚洲精品久久久久| 一区二区三区高清在线| 欧美亚洲自拍偷拍| 国产精品高潮呻吟AV无码| 菠萝蜜视频在线观看入口| 精品国产一区二区三| 免费欧美日韩国产三级电影| 高清国语自产拍免费视频国产| 天堂在线看视频| 偷拍中文亚洲欧美动漫| 亚洲欧美激情精品一区二区| 欧美日韩综合高清一区二区| 国产视频精品免费| 5g影院天天爽成人免费下载| 亚洲国产精品99久久久久久久久| 国产亚洲精品一区二区在线观看| 一区二区三区国产在线| 一边摸一边做爽的视频17国产| 尤物九九久久国产精品的分类| 日本视频一区二区在线观看| 日韩少妇内射免费播放| 影音先锋男人在线资源| 亚洲成人激情视频| 国产高潮国产高潮久久久91| 91豆花视频在线播放| 狠狠狠色丁香婷婷综合久久五月| 在线观看污污视频| 亚洲精品免费在线播放| 你懂的好爽在线观看| 麻豆免费精品视频| 在线免费av网址| 久久精品男人天堂| 五月天网站亚洲| 日本最新一区二区三区视频观看| 在线观看一二三区| 欧美插插视频| 丝袜国产日韩另类美女| 亚洲精品有码在线| 久久综合综合久久| 日韩少妇内射免费播放| 天天躁日日躁成人字幕aⅴ| 99久久精品无码一区二区毛片| 蜜臀国产一区二区三区在线播放| 91免费观看视频| 黑料不打烊so导航| 日韩三级成人| 加勒比在线一区| 欧美一卡2卡3卡4卡无卡免费观看水多多| 亚洲精品成人无限看| 亚洲a∨无码无在线观看| 在线中文字幕第一页| 在线观看成人av电影| av日韩在线网站| 国产一区二区视频免费观看| 福利视频亚洲| 99精品欧美一区二区三区综合在线| 久久精品亚洲精品| 欧美一区二区三区四区在线观看地址| 精品久久久久久久久中文字幕| 日本黄色不卡视频| 欧美黑人性生活视频| 女人18毛片水真多免费播放| 欧美一区二区三区免费视频| 国产一二区在线| 国产麻豆精品一区二区| 欧美性xxxxxxxx| 91视频亚洲| 摸bbb搡bbb搡bbbb| 欧美成人午夜精品免费| 欧美亚洲另类制服自拍| 久久精品国产77777蜜臀| a在线观看网站| 青青草免费观看完整版高清| 日本成人超碰在线观看| 先锋影音国产精品| 深夜黄色小视频| 亚洲人成网站影音先锋播放| 久久久久久久久久久综合| 亚洲福利小视频| 欧洲福利电影| 婷婷久久综合网| 黄色一区二区在线| 日韩精品极品视频免费观看| 精品久久久久久一区二区里番| 国产99精品| 五月香视频在线观看| 在线一区视频观看| 黄色在线观看www| 欧美精品激情在线| 欧美亚洲国产免费| 国内精品亚洲| 97香蕉久久超级碰碰高清版| 午夜剧场高清版免费观看| 偷偷看偷偷操| 中文字幕久久网| 九九久久久久午夜精选| 国产一区日韩| 这里只有精品视频在线观看| 亚洲免费资源在线播放| 2021年精品国产福利在线| 亚洲综合五月天婷婷丁香| 超级砰砰砰97免费观看最新一期| www.欧美日本韩国| 精品视频在线观看一区二区| 疯狂做受xxxⅹ高潮视频免费| 99xxxx成人网| 神马影院我不卡| 精品sm在线观看| 欧美三级视频在线观看| 欧美美女视频在线观看| 亚洲国产精品福利| 日韩一级欧美一级| 国产精品系列在线| 美丽的小蜜桃4春潮| 99久久精品网| 性一交一乱一伧国产女士spa| 欧美人善zozσ性伦交| 日韩精品视频在线观看视频| 亚洲精品自产拍在线观看| 91视频你懂的| 乱人伦xxxx国语对白| 曰韩少妇与小伙激情| 在线观看老湿视频福利| 日韩电影免费观看在线观看| a天堂资源在线观看| 嫩草www视频在线观看高清| 国产精品一色哟哟哟| 日本韩国精品一区二区| 茄子视频成人在线观看| 黄色毛片免费| 亚洲欧美强伦一区二区| 国产欧美日韩高清| 国产盗摄精品一区二区三区在线| 亚洲第一网站男人都懂| 亚洲国产精品毛片| 天天操天天干天天爱| 日韩成人一区二区| 青青九九免费视频在线| 亚洲日本青草视频在线怡红院| 久久精品一区二区国产| 国产视频1区| 福利视频导航大全| 欧美禁忌电影网| 国产成人免费精品| 国产精品久久久久久麻豆一区软件| 国产精品午夜一区二区三区| 免费国产h视频在线观看86| 在线视频色在线| 国产精品国产三级国产aⅴ入口| 成人www视频在线观看| 亚洲国产精品影院| caoporm超碰国产精品| 成人免费观看在线网址| а_天堂中文在线| 日本色图在线| 国产精品大片wwwwww| 亚洲精品999| 国产凹凸在线观看一区二区| 亚洲最新视频在线观看| 国外视频精品毛片| 欧美国产日本视频| av免费观看一区二区| 欧美精品久久久久性色| 老司机午夜av| 国产精品婷婷午夜在线观看| 久久精品一二区| 国产精品s色| 国产精品成人在线观看| 国产一二区视频| 热色播在线视频| 欧美喷潮久久久xxxxx| 中国字幕a在线看韩国电影| 欧美videos另类精品| 欧美精品xx| 国产美女在线一区二区三区| 精品久久久久久最新网址| 另类视频在线观看+1080p| 国产成人免费视频网站| 色综合一个色综合| 国产又粗又猛又爽又黄的网站| 50度灰在线| 国产一区二区香蕉| 国产一级二级三级精品| 91官网在线免费观看| 一区二区三区视频免费看| 亚洲成人av网址| 激情综合激情| 国产精品日韩在线| www中文字幕在线观看| 欧美日一区二区三区在线观看国产免| 国产精选一区二区三区不卡催乳| 久久久久一区二区三区四区| 日本性生活一级片| 波多野结衣电影在线播放| 久久精品亚洲精品国产欧美kt∨| 男人先锋资源| 曰本一区二区三区视频| 在线观看中文字幕不卡| 欧美高清一级片| 日韩在线观看视频免费| 26uuu精品一区二区三区四区在线| 日本大胆人体视频| 国产精品乱码| 久久国产精品免费| 中文视频在线| 国产日韩精品在线播放| 亚洲日本国产| 精品视频三区| 天天综合色天天综合色h| 热久久久久久| 亚洲va国产va天堂va久久| 成人久久电影| 亚洲最大激情网| 91福利国产成人精品照片| 免费看日本黄色| 欧美一区二区三区在线观看免费| 自拍欧美日韩| sesexxxx| 岛国精品视频在线播放| 啦啦啦在线视频免费观看高清中文| 日韩欧美网址| 久久美女福利视频| 欧美日韩一区二区三区在线播放| 精品国产影院| 男女视频一区二区三区| 成人黄色网免费| 一区二区三区四区在线| 懂色aⅴ精品一区二区三区蜜月| 欧美日韩国产精品一区| 欧美成人一区二区三区四区| 国产精品久久国产精麻豆99网站| 精品成人久久| 精品av综合导航| 亚洲一区 二区 三区| 麻豆传媒一区二区三区| 天天撸夜夜操| 日本一区二区三区电影| 国产二区国产一区在线观看| jizzjizzjizz美国| 欧美熟妇一区二区| 一级毛片在线播放| 国产成人亚洲精品播放器下载| 六九午夜精品视频| 女人一区二区三区| 免费观看一级特黄欧美大片| 91成年人网站| 国产制服丝袜一区| 国产黑丝在线一区二区三区| 成人免费高清在线播放| 91美女片黄在线观看91美女| 99在线视频观看| 欧美激情一区二区三区| av网站在线免费看| 国产一区二区三区免费在线| 欧美一级在线免费| 国模极品一区二区三区| 高清乱码免费看污| 欧美亚洲国产精品久久| 91麻豆精品国产91久久久平台| 一区二区三区高清视频在线观看| 看片一区二区| 六月天综合网| 国产亚洲一区二区三区| 日本成人手机在线| 国产又爽又黄又舒服又刺激视频| 亚洲精品成人a| sese在线播放| 精品国产亚洲av麻豆| 色哟哟日韩精品| 国产红桃视频| 欧美国产日韩一区二区在线观看| av电影在线播放高清免费观看| 激情成人开心网| 国产精品美女免费| 91精品综合久久久久久五月天| 91国内外精品自在线播放| 欧美年轻男男videosbes| 91在线你懂得| 国产成人综合一区| h视频免费在线观看| 国产高清不卡一区二区| 国内一区二区三区在线视频| 欧美wwwwxxxx| 亚洲国产精品一区二区久久| 成人国产精品免费视频| 男女小视频在线观看| 影音先锋在线中文字幕| 欧美极品少妇全裸体| 欧美日韩一区二区视频在线观看| 精品国产美女福利到在线不卡| www色aa色aawww| 免费在线观看污视频| 国产福利电影在线| 美日韩黄色大片| 国产精品国产福利国产秒拍| 最近免费中文字幕mv视频| 捆绑紧缚一区二区三区在线观看| 制服丝袜中文字幕在线| 亚洲最大黄色| 天天操天天操天天操天天操天天操| 欧美第一黄色网| 91精品国产欧美日韩| 男女黄床上色视频| 亚洲v片在线观看| 美女翘臀白浆直流视频| 亚洲国产精品成人综合| 亚洲在线观看免费| 精品偷拍激情视频在线观看| 手机av在线免费观看| 69av二区| 91精品国产视频| 天堂8中文在线最新版在线| 欧美自拍一区| 一色屋色费精品视频在线观看| 免费视频一区二区三区在线观看| 亚洲国产毛片aaaaa无费看| 中文字幕第一页在线播放| 国产一区二区三区亚洲| av片在线免费看| 日本一区二区三区视频在线看|