相信每个项目都会有用户反馈建议等功能,这个实现的方法很多,下面是我实现的方法,供大家交流。首先看具体界面,三个字段。名字,邮箱为选填,可以为空,建议不能为空。如有需要可以给我留言。
下面贴出布局代码,这里用到一个
<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就行了。
到此就完成了一个用户反馈的基本功能,后台数据里展示。如有问题欢迎给我留言。

根据美国司法部的解释,蓝色警报旨在提供关于可能对执法人员构成直接和紧急威胁的个人的重要信息。这种警报的目的是及时通知公众,并让他们了解与这些罪犯相关的潜在危险。通过这种主动的方式,蓝色警报有助于增强社区的安全意识,促使人们采取必要的预防措施以保护自己和周围的人。这种警报系统的建立旨在提高对潜在威胁的警觉性,并加强执法机构与公众之间的沟通,以共尽管这些紧急通知对我们社会至关重要,但有时可能会对日常生活造成干扰,尤其是在午夜或重要活动时收到通知时。为了确保安全,我们建议您保持这些通知功能开启,但如果

Android中的轮询是一项关键技术,它允许应用程序定期从服务器或数据源检索和更新信息。通过实施轮询,开发人员可以确保实时数据同步并向用户提供最新的内容。它涉及定期向服务器或数据源发送请求并获取最新信息。Android提供了定时器、线程、后台服务等多种机制来高效地完成轮询。这使开发人员能够设计与远程数据源保持同步的响应式动态应用程序。本文探讨了如何在Android中实现轮询。它涵盖了实现此功能所涉及的关键注意事项和步骤。轮询定期检查更新并从服务器或源检索数据的过程在Android中称为轮询。通过

为了提升用户体验并防止数据或进度丢失,Android应用程序开发者必须避免意外退出。他们可以通过加入“再次按返回退出”功能来实现这一点,该功能要求用户在特定时间内连续按两次返回按钮才能退出应用程序。这种实现显著提升了用户参与度和满意度,确保他们不会意外丢失任何重要信息Thisguideexaminesthepracticalstepstoadd"PressBackAgaintoExit"capabilityinAndroid.Itpresentsasystematicguid

1.java复杂类如果有什么地方不懂,请看:JAVA总纲或者构造方法这里贴代码,很简单没有难度。2.smali代码我们要把java代码转为smali代码,可以参考java转smali我们还是分模块来看。2.1第一个模块——信息模块这个模块就是基本信息,说明了类名等,知道就好对分析帮助不大。2.2第二个模块——构造方法我们来一句一句解析,如果有之前解析重复的地方就不再重复了。但是会提供链接。.methodpublicconstructor(Ljava/lang/String;I)V这一句话分为.m

如何将WhatsApp聊天从Android转移到iPhone?你已经拿到了新的iPhone15,并且你正在从Android跳跃?如果是这种情况,您可能还对将WhatsApp从Android转移到iPhone感到好奇。但是,老实说,这有点棘手,因为Android和iPhone的操作系统不兼容。但不要失去希望。这不是什么不可能完成的任务。让我们在本文中讨论几种将WhatsApp从Android转移到iPhone15的方法。因此,坚持到最后以彻底学习解决方案。如何在不删除数据的情况下将WhatsApp

原因:1、安卓系统上设置了一个JAVA虚拟机来支持Java应用程序的运行,而这种虚拟机对硬件的消耗是非常大的;2、手机生产厂商对安卓系统的定制与开发,增加了安卓系统的负担,拖慢其运行速度影响其流畅性;3、应用软件太臃肿,同质化严重,在一定程度上拖慢安卓手机的运行速度。

1.启动ida端口监听1.1启动Android_server服务1.2端口转发1.3软件进入调试模式2.ida下断2.1attach附加进程2.2断三项2.3选择进程2.4打开Modules搜索artPS:小知识Android4.4版本之前系统函数在libdvm.soAndroid5.0之后系统函数在libart.so2.5打开Openmemory()函数在libart.so中搜索Openmemory函数并且跟进去。PS:小知识一般来说,系统dex都会在这个函数中进行加载,但是会出现一个问题,后

1.自动化测试自动化测试主要包括几个部分,UI功能的自动化测试、接口的自动化测试、其他专项的自动化测试。1.1UI功能自动化测试UI功能的自动化测试,也就是大家常说的自动化测试,主要是基于UI界面进行的自动化测试,通过脚本实现UI功能的点击,替代人工进行自动化测试。这个测试的优势在于对高度重复的界面特性功能测试的测试人力进行有效的释放,利用脚本的执行,实现功能的快速高效回归。但这种测试的不足之处也是显而易见的,主要包括维护成本高,易发生误判,兼容性不足等。因为是基于界面操作,界面的稳定程度便成了


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)
