android+json+php+mysql实现用户反馈功能方法解析

相信每个项目都会有用户反馈建议等功能,这个实现的方法很多,下面是我实现的方法,供大家交流。首先看具体界面,三个字段。名字,邮箱为选填,可以为空,建议不能为空。如有需要可以给我留言。

 

下面贴出布局代码,这里用到一个<include layout="@layout/uphead">就是把另外一个布局文件引入到这个布局中。

复制代码 代码如下:

<?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为返回按钮。

复制代码 代码如下:

<?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客户端代码,三个类,一个用于与服务器交互发送post请求,以及json的传递。还有一个Dailog实例。

复制代码 代码如下:

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";//此处写的是你的服务器端的地址

@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实例类

复制代码 代码如下:

/**

*

*/

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)

{

// 创建一个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)

{

// 结束当前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();

}

}

剩下就是如何与服务器端交互了不多说,代码如下

复制代码 代码如下:

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客户端已经完成,后天服务器端用php+mysql实现,当然这里只是个实例,存取到数据库里面,没有进行展示,代码如下

复制代码 代码如下:

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

}

?>

数据库表结构如下,连接数据库代码就不贴出了,记得把编码设置为UTF-8就行了。

到此就完成了一个用户反馈的基本功能,后台数据里展示。如有问题欢迎给我留言。

时间: 2024-10-24 18:09:52

android+json+php+mysql实现用户反馈功能方法解析的相关文章

android+json+php+mysql实现用户反馈功能方法解析_Android

相信每个项目都会有用户反馈建议等功能,这个实现的方法很多,下面是我实现的方法,供大家交流.首先看具体界面,三个字段.名字,邮箱为选填,可以为空,建议不能为空.如有需要可以给我留言.  下面贴出布局代码,这里用到一个<include layout="@layout/uphead">就是把另外一个布局文件引入到这个布局中. 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> &l

android+json+php+mysql实现用户反馈功能

相信每个项目都会有用户反馈建议等功能,这个实现的方法很多,下面是我实现的方法,供大家交流.首 先看具体界面,三个字段.名字,邮箱为选填,可以为空,建议不能为空.如有需要可以给我留言. 下面贴出布局代码,这里用到一个<include layout="@layout/uphead">就是把另外一个 布局文件引入到这个布局中. <?xml version="1.0" encoding="utf-8"?> <LinearLa

Android通过json向MySQL中读写数据的方法详解【读取篇】_Android

本文实例讲述了Android通过json向MySQL中读取数据的方法.分享给大家供大家参考,具体如下: 首先 要定义几个解析json的方法parseJsonMulti,代码如下: private void parseJsonMulti(String strResult) { try { Log.v("strResult11","strResult11="+strResult); int index=strResult.indexOf("[");

Android通过json向MySQL中读写数据的方法详解【写入篇】_Android

本文实例讲述了Android通过json向MySQL中写入数据的方法.分享给大家供大家参考,具体如下: 先说一下如何通过json将Android程序中的数据上传到MySQL中: 首先定义一个类JSONParser.Java类,将json上传数据的方法封装好,可以直接在主程序中调用该类,代码如下 public class JSONParser { static InputStream is = null; static JSONObject jObj = null; static String j

Android通过json向MySQL中读写数据的方法详解【读取篇】

本文实例讲述了Android通过json向MySQL中读取数据的方法.分享给大家供大家参考,具体如下: 首先 要定义几个解析json的方法parseJsonMulti,代码如下: private void parseJsonMulti(String strResult) { try { Log.v("strResult11","strResult11="+strResult); int index=strResult.indexOf("[");

Android通过json向MySQL中读写数据的方法详解【写入篇】

本文实例讲述了Android通过json向MySQL中写入数据的方法.分享给大家供大家参考,具体如下: 先说一下如何通过json将Android程序中的数据上传到MySQL中: 首先定义一个类JSONParser.Java类,将json上传数据的方法封装好,可以直接在主程序中调用该类,代码如下 public class JSONParser { static InputStream is = null; static JSONObject jObj = null; static String j

MySQL验证用户权限的方法_Mysql

知识归纳 因为MySQL是使用User和Host两个字段来确定用户身份的,这样就带来一个问题,就是一个客户端到底属于哪个host.如果一个客户端同时匹配几个Host,对用户的确定将按照下面的优先级来排 基本观点越精确的匹配越优先 Host列上,越是确定的Host越优先,[localhost, 192.168.1.1, wiki.yfang.cn] 优先于[192.168.%, %.yfang.cn],优先于[192.%, %.cn],优先于[%] User列上,明确的username优先于空us

设置mysql数据库用户的权限方法总结

格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码" 如,增加一个用户user1密码为password1,让其可以在本机上登录, 并对所有数据库有查询.插入.修改.删除的权限 我的mysql安装在c:/mysql 一.更改密码 第一种方式: 1.更改之前root没有密码的情况 c:/mysql/bin>mysqladmin -u root password "your password" 2.更改之前root有

MySQL创建用户与授权方法_Mysql

注:我的运行环境是widnows xp professional + MySQL5.0 一, 创建用户: 命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明:username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password - 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码