Heim  >  Artikel  >  php教程  >  android+json+php+mysql实现用户反馈功能

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

WBOY
WBOYOriginal
2016-07-11 20:00:37967Durchsuche

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

下面贴出布局代码,这里用到一个就是把另外一个布局文件引入到这个布局中。

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

下面贴出uphead的布局代码,里面用到一个TextView,一个Button为返回按钮。

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

下面贴出android客户端代码,三个类,一个用于与服务器交互发送post请求,以及json的传递。还有一个Dailog实例。

<span style="color: #0000ff;">package</span><span style="color: #000000;"> com.android.up;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> java.util.ArrayList;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> java.util.List;

</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> org.apache.http.HttpResponse;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> org.apache.http.NameValuePair;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> org.apache.http.client.ClientProtocolException;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> org.apache.http.message.BasicNameValuePair;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> org.json.JSONObject;

</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> com.android.MainActivity;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> com.android.R;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> com.anroid.net.DialogUtil;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> android.app.Activity;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> android.app.ProgressDialog;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> android.content.Intent;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> android.os.AsyncTask;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> android.os.Bundle;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> android.view.View;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> android.view.View.OnClickListener;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> android.widget.Button;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> android.widget.EditText;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> android.widget.TextView;

</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span> up <span style="color: #0000ff;">extends</span><span style="color: #000000;"> Activity {

    </span><span style="color: #008000;">//</span><span style="color: #008000;"> Progress Dialog</span>
    <span style="color: #0000ff;">private</span><span style="color: #000000;"> ProgressDialog pDialog;
    </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> TextView tv_head;
    JSONParser jsonParser </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> JSONParser();
    EditText inputName;
    EditText inputEmail;
    EditText inputDesc;
    Button upback;

    </span><span style="color: #008000;">//</span><span style="color: #008000;"> url to create new product</span>
    <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> String url_up = "http://10.0.2.2/up/up.php";<span style="color: #008000;"><br>    private static final String TAG_MESSAGE = "message";<br></span>
<span style="color: #000000;">    @Override
    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> onCreate(Bundle savedInstanceState) {
        </span><span style="color: #0000ff;">super</span><span style="color: #000000;">.onCreate(savedInstanceState);
        setContentView(R.layout.up);
        tv_head </span>=<span style="color: #000000;"> (TextView)findViewById(R.id.tv_head);
        tv_head.setText(</span>"建议"<span style="color: #000000;">);
        </span><span style="color: #008000;">//</span><span style="color: #008000;"> Edit Text</span>
        inputName =<span style="color: #000000;"> (EditText) findViewById(R.id.inputName);
        inputEmail </span>=<span style="color: #000000;"> (EditText) findViewById(R.id.inputEmail);
        inputDesc </span>=<span style="color: #000000;"> (EditText) findViewById(R.id.inputDesc);
        upback </span>=<span style="color: #000000;"> (Button)findViewById(R.id.upback);
        upback.setOnClickListener(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> OnClickListener() {
            
            @Override
            </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> onClick(View arg0) {
                </span><span style="color: #008000;">//</span><span style="color: #008000;"> TODO Auto-generated method stub</span>
                Intent back = <span style="color: #0000ff;">new</span> Intent(up.<span style="color: #0000ff;">this</span>,MainActivity.<span style="color: #0000ff;">class</span><span style="color: #000000;">);
                back.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
                startActivity(back);
                up.</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.finish();
            }
        });

        </span><span style="color: #008000;">//</span><span style="color: #008000;"> Create button</span>
        Button btnCreateProduct =<span style="color: #000000;"> (Button) findViewById(R.id.btnCreateProduct);
        </span><span style="color: #008000;">//</span><span style="color: #008000;"> button click event</span>
        btnCreateProduct.setOnClickListener(<span style="color: #0000ff;">new</span><span style="color: #000000;"> View.OnClickListener() {

            </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> onClick(View view) {
                </span><span style="color: #008000;">//</span><span style="color: #008000;"> creating new product in background thread</span>
                <span style="color: #0000ff;">if</span><span style="color: #000000;">(validate()){                
                </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Up().execute();            
            }
                }
        });
    }
    </span><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">boolean</span><span style="color: #000000;"> validate()
    {
        String description </span>=<span style="color: #000000;"> inputDesc.getText().toString().trim();
        </span><span style="color: #0000ff;">if</span> (description.equals(""<span style="color: #000000;">))
        {
            DialogUtil.showDialog(</span><span style="color: #0000ff;">this</span>, "您还没有填写建议", <span style="color: #0000ff;">false</span><span style="color: #000000;">);
            </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #000000;">;
        }
        
        </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;
    }
    </span><span style="color: #008000;">/**</span><span style="color: #008000;">
     * Background Async Task to Create new product
     * </span><span style="color: #008000;">*/</span>
    <span style="color: #0000ff;">class</span> Up <span style="color: #0000ff;">extends</span> AsyncTask<string string><span style="color: #000000;"> {

        </span><span style="color: #008000;">/**</span><span style="color: #008000;">
         * Before starting background thread Show Progress Dialog
         * </span><span style="color: #008000;">*/</span><span style="color: #000000;">
        @Override
        </span><span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> onPreExecute() {
            </span><span style="color: #0000ff;">super</span><span style="color: #000000;">.onPreExecute();
            pDialog </span>= <span style="color: #0000ff;">new</span> ProgressDialog(up.<span style="color: #0000ff;">this</span><span style="color: #000000;">);
            pDialog.setMessage(</span>"正在上传.."<span style="color: #000000;">);
            pDialog.setIndeterminate(</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);
            pDialog.setCancelable(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);
            pDialog.show();
        }
        </span><span style="color: #008000;">/**</span><span style="color: #008000;">
         * Creating product
         * </span><span style="color: #008000;">*/</span>
        <span style="color: #0000ff;">protected</span><span style="color: #000000;"> String doInBackground(String... args) {
            String name </span>=<span style="color: #000000;"> inputName.getText().toString();
            String email </span>=<span style="color: #000000;"> inputEmail.getText().toString();
            String description </span>=<span style="color: #000000;"> inputDesc.getText().toString();

            </span><span style="color: #008000;">//</span><span style="color: #008000;"> Building Parameters</span>
            List<namevaluepair> params = <span style="color: #0000ff;">new</span> ArrayList<namevaluepair><span style="color: #000000;">();
            params.add(</span><span style="color: #0000ff;">new</span> BasicNameValuePair("name"<span style="color: #000000;">, name));
            params.add(</span><span style="color: #0000ff;">new</span> BasicNameValuePair("email"<span style="color: #000000;">, email));
            params.add(</span><span style="color: #0000ff;">new</span> BasicNameValuePair("description"<span style="color: #000000;">, description));

            </span><span style="color: #008000;">//</span><span style="color: #008000;"> getting JSON Object
            </span><span style="color: #008000;">//</span><span style="color: #008000;"> Note that create product url accepts POST method</span>
           <span style="color: #0000ff;">try</span><span style="color: #000000;">{
            JSONObject json </span>=<span style="color: #000000;"> jsonParser.makeHttpRequest(url_up,
                    </span>"POST"<span style="color: #000000;">, params);<br>            String message = json.getString(TAG_MESSAGE);<br>            return message;
           }</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(Exception e){</span><span style="color: #000000;">
               e.printStackTrace(); <br>               return "";          
           }
            </span><span style="color: #008000;">//</span><span style="color: #008000;"> check for success tag</span>
            
     <span style="color: #000000;">
        }
        </span><span style="color: #008000;">/**</span><span style="color: #008000;">
         * After completing background task Dismiss the progress dialog
         * *</span><span style="color: #008000;">*/</span>
        <span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> onPostExecute(String message) {               </span><span style="color: #000000;">     
            pDialog.dismiss();<br>           //message 为接收doInbackground的返回值<br>            Toast.makeText(getApplicationContext(), message, 8000).show();    
                
               
        }
        }

    }</span></namevaluepair></namevaluepair></string>

下面贴出Dailog实例类

<span style="color: #008000;">/**</span><span style="color: #008000;">
 * 
 </span><span style="color: #008000;">*/</span>
<span style="color: #0000ff;">package</span><span style="color: #000000;"> com.anroid.net;

</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> android.app.AlertDialog;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> android.content.Context;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> android.content.DialogInterface;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> android.content.DialogInterface.OnClickListener;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> android.view.View;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> android.app.Activity;</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> DialogUtil
{
    </span><span style="color: #008000;">//</span><span style="color: #008000;"> 定义一个显示消息的对话框</span>
    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> showDialog(<span style="color: #0000ff;">final</span><span style="color: #000000;"> Context ctx
        , String msg , </span><span style="color: #0000ff;">boolean</span><span style="color: #000000;"> closeSelf)
    {
        </span><span style="color: #008000;">//</span><span style="color: #008000;"> 创建一个AlertDialog.Builder对象</span>
        AlertDialog.Builder builder = <span style="color: #0000ff;">new</span><span style="color: #000000;"> AlertDialog.Builder(ctx)
            .setMessage(msg).setCancelable(</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);
        </span><span style="color: #0000ff;">if</span><span style="color: #000000;">(closeSelf)
        {
            builder.setPositiveButton(</span>"确定", <span style="color: #0000ff;">new</span><span style="color: #000000;"> OnClickListener()
            {
                </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> onClick(DialogInterface dialog, <span style="color: #0000ff;">int</span><span style="color: #000000;"> which)
                {
                    </span><span style="color: #008000;">//</span><span style="color: #008000;"> 结束当前Activity</span>
<span style="color: #000000;">                    ((Activity)ctx).finish();
                }
            });        
        }
        </span><span style="color: #0000ff;">else</span><span style="color: #000000;">
        {
            builder.setPositiveButton(</span>"确定", <span style="color: #0000ff;">null</span><span style="color: #000000;">);
        }
        builder.create().show();
    }    
    </span><span style="color: #008000;">//</span><span style="color: #008000;"> 定义一个显示指定组件的对话框</span>
    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> showDialog(Context ctx , View view)
    {
        AlertDialog.Builder builder </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> AlertDialog.Builder(ctx)
            .setView(view).setCancelable(</span><span style="color: #0000ff;">false</span><span style="color: #000000;">)
            .setPositiveButton(</span>"确定", <span style="color: #0000ff;">null</span><span style="color: #000000;">);
        builder.create()
            .show();
    }
}</span>

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

<span style="color: #0000ff;">package</span><span style="color: #000000;"> com.android.up;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> java.io.BufferedReader;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> java.io.IOException;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> java.io.InputStream;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> java.io.InputStreamReader;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> java.io.UnsupportedEncodingException;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> java.util.List;

</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> org.apache.http.HttpEntity;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> org.apache.http.HttpResponse;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> org.apache.http.NameValuePair;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> org.apache.http.client.ClientProtocolException;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> org.apache.http.client.entity.UrlEncodedFormEntity;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> org.apache.http.client.methods.HttpPost;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> org.apache.http.impl.client.DefaultHttpClient;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> org.apache.http.protocol.HTTP;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> org.json.JSONException;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> org.json.JSONObject;

</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> android.util.Log;

</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> JSONParser {

    </span><span style="color: #0000ff;">static</span> InputStream is = <span style="color: #0000ff;">null</span><span style="color: #000000;">;
    </span><span style="color: #0000ff;">static</span> JSONObject jObj = <span style="color: #0000ff;">null</span><span style="color: #000000;">;
    </span><span style="color: #0000ff;">static</span> String json = ""<span style="color: #000000;">;
    </span><span style="color: #008000;">//</span><span style="color: #008000;"> constructor</span>
    <span style="color: #0000ff;">public</span><span style="color: #000000;"> JSONParser() {
    }
    </span><span style="color: #008000;">//</span><span style="color: #008000;"> function get json from url
    </span><span style="color: #008000;">//</span><span style="color: #008000;"> by making HTTP POST </span>
    <span style="color: #0000ff;">public</span><span style="color: #000000;"> JSONObject makeHttpRequest(String url, String method,
            List</span><namevaluepair><span style="color: #000000;"> params) {

        </span><span style="color: #008000;">//</span><span style="color: #008000;"> Making HTTP request</span>
        <span style="color: #0000ff;">try</span><span style="color: #000000;"> {    
                </span><span style="color: #008000;">//</span><span style="color: #008000;"> request method is POST
                </span><span style="color: #008000;">//</span><span style="color: #008000;"> defaultHttpClient</span>
                DefaultHttpClient httpClient = <span style="color: #0000ff;">new</span><span style="color: #000000;"> DefaultHttpClient();
                HttpPost httpPost </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> HttpPost(url);
                httpPost.setEntity(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> UrlEncodedFormEntity(params,HTTP.UTF_8));
                HttpResponse httpResponse </span>=<span style="color: #000000;"> httpClient.execute(httpPost);
                HttpEntity httpEntity </span>=<span style="color: #000000;"> httpResponse.getEntity();
                is </span>=<span style="color: #000000;"> httpEntity.getContent();                
            
        } </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (UnsupportedEncodingException e) {
            e.printStackTrace();
        } </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (ClientProtocolException e) {
            e.printStackTrace();
        } </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (IOException e) {
            e.printStackTrace();
        }
        </span><span style="color: #0000ff;">try</span><span style="color: #000000;"> {
            BufferedReader reader </span>= <span style="color: #0000ff;">new</span> BufferedReader(<span style="color: #0000ff;">new</span><span style="color: #000000;"> InputStreamReader(
                    is, </span>"UTF-8"<span style="color: #000000;">));
            StringBuilder sb </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> StringBuilder();
            String line </span>= <span style="color: #0000ff;">null</span><span style="color: #000000;">;
            </span><span style="color: #0000ff;">while</span> ((line = reader.readLine()) != <span style="color: #0000ff;">null</span><span style="color: #000000;">) {
                sb.append(line </span>+ "\n"<span style="color: #000000;">);
            }
            is.close();
            json </span>=<span style="color: #000000;"> sb.toString();
        } </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (Exception e) {
            Log.e(</span>"Buffer Error", "Error converting result " +<span style="color: #000000;"> e.toString());
            Log.d(</span>"json"<span style="color: #000000;">, json.toString());
        }

        </span><span style="color: #008000;">//</span><span style="color: #008000;"> try parse the string to a JSON object</span>
        <span style="color: #0000ff;">try</span><span style="color: #000000;"> {
            jObj </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> JSONObject(json);
        } </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (JSONException e) {
            Log.e(</span>"JSON Parser", "Error parsing data " +<span style="color: #000000;"> e.toString());
        }

        </span><span style="color: #008000;">//</span><span style="color: #008000;"> return JSON String</span>
        <span style="color: #0000ff;">return</span><span style="color: #000000;"> jObj;

    }
}</span></namevaluepair>

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

<span style="color: #000000;">php
</span><span style="color: #008000;">//</span><span style="color: #008000;"> array for JSON response</span>
<span style="color: #800080;">$response</span> = <span style="color: #0000ff;">array</span><span style="color: #000000;">();
</span><span style="color: #0000ff;">include</span>("conn.php"<span style="color: #000000;">);
</span><span style="color: #008000;">//</span><span style="color: #008000;"> check for required fields</span>
<span style="color: #0000ff;">if</span> (<span style="color: #0000ff;">isset</span>(<span style="color: #800080;">$_POST</span>['name']) && <span style="color: #0000ff;">isset</span>(<span style="color: #800080;">$_POST</span>['email']) && <span style="color: #0000ff;">isset</span>(<span style="color: #800080;">$_POST</span>['description'<span style="color: #000000;">])) {
    
    </span><span style="color: #800080;">$name</span> = <span style="color: #800080;">$_POST</span>['name'<span style="color: #000000;">];
    </span><span style="color: #800080;">$email</span> = <span style="color: #800080;">$_POST</span>['email'<span style="color: #000000;">];
    </span><span style="color: #800080;">$description</span> = <span style="color: #800080;">$_POST</span>['description'<span style="color: #000000;">];
    </span><span style="color: #800080;">$result</span> = <span style="color: #008080;">mysql_query</span>("INSERT INTO up(name, email, description) VALUES('<span style="color: #800080;">$name</span>', '<span style="color: #800080;">$email</span>', '<span style="color: #800080;">$description</span>')"<span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;"> check if row inserted or not</span>
    <span style="color: #0000ff;">if</span> (<span style="color: #800080;">$result</span><span style="color: #000000;">) {
        </span><span style="color: #008000;">//</span><span style="color: #008000;"> successfully inserted into database</span>
        <span style="color: #800080;">$response</span>["success"] = 1<span style="color: #000000;">;
        </span><span style="color: #800080;">$response</span>["message"] = "Product successfully created."<span style="color: #000000;">;

        </span><span style="color: #008000;">//</span><span style="color: #008000;"> echoing JSON response</span>
        <span style="color: #0000ff;">echo</span> json_encode(<span style="color: #800080;">$response</span><span style="color: #000000;">);
    } </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {
        </span><span style="color: #008000;">//</span><span style="color: #008000;"> failed to insert row</span>
        <span style="color: #800080;">$response</span>["success"] = 0<span style="color: #000000;">;
        </span><span style="color: #800080;">$response</span>["message"] = "Oops! An error occurred."<span style="color: #000000;">;
        
        </span><span style="color: #008000;">//</span><span style="color: #008000;"> echoing JSON response</span>
        <span style="color: #0000ff;">echo</span> json_encode(<span style="color: #800080;">$response</span><span style="color: #000000;">);
    }
} </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {
    </span><span style="color: #008000;">//</span><span style="color: #008000;"> required field is missing</span>
    <span style="color: #800080;">$response</span>["success"] = 0<span style="color: #000000;">;
    </span><span style="color: #800080;">$response</span>["message"] = "Required field(s) is missing"<span style="color: #000000;">;

    </span><span style="color: #008000;">//</span><span style="color: #008000;"> echoing JSON response</span>
    <span style="color: #0000ff;">echo</span> json_encode(<span style="color: #800080;">$response</span><span style="color: #000000;">);
}
</span>?>

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

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

Stellungnahme:
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