你是做web開發(fā)的吧?
十余年的廣昌網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。網(wǎng)絡(luò)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整廣昌建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“廣昌網(wǎng)站設(shè)計”,“廣昌網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
問題要發(fā)到 電腦/網(wǎng)絡(luò)—軟件開發(fā)—移動開發(fā)下比較準(zhǔn)確。
android上是沒有form表單的概念的,通常用listView列表來顯示。
前幾天給別人寫了一個這樣的demo,如果有需要,可以留下郵箱發(fā)給你
1.服務(wù)器端的準(zhǔn)備
為了完成該實例,我們需要在服務(wù)器端做以下準(zhǔn)備工作:
(1)我們需要在MyEclipse中創(chuàng)建一個Web工程,用來模擬服務(wù)器端的Web服務(wù),這里,我將該工程命名為了“myhttp”。
(2)修改該工程的“index.jsp”文件,添加兩個輸入框和一個提交按鈕,作為該Web工程的顯示頁面。運行Tomcat,在瀏覽器中訪問該Web工程,可以看到如圖1所示的界面。
Web工程的顯示頁面
(3)在該Web工程中,創(chuàng)建一個繼承自HttpServlet的LoginAction類,并實現(xiàn)其中的doPost()方法,用來響應(yīng)圖1所示頁面的用戶操作。具體實現(xiàn)如下:
由上述代碼可以看出,當(dāng)我們在圖1所示的頁面輸入用戶名“admin”,密碼“123”時,點擊提交按鈕,會得到“Login succeeded!”的提示信息,如圖2所示。若用戶名、密碼錯誤,則會得到“Login failed!”的提示信息。
2.客戶端實現(xiàn)
在Android客戶端,我們需要完成的工作是:以POST方式發(fā)送用戶名密碼到上述服務(wù)器,并獲得服務(wù)器的驗證信息。
我們分以下幾個步驟來完成。
2.1 UI界面
在Android工程中,我們需要完成一個簡單的UI界面,用來完成用戶名密碼的輸入、發(fā)送POST請求、顯示服務(wù)器的驗證結(jié)果,完成后的界面如圖3所示。
在MainActivity中,我們需要獲取兩個EditText控件的輸入,“提交”按鍵的監(jiān)聽,以及服務(wù)器驗證結(jié)果的TextView內(nèi)容顯示。具體實現(xiàn)代碼如下:
2.2發(fā)送POST請求到服務(wù)器
可以看到上述代碼中,我們調(diào)用了HttpUtils類的靜態(tài)方法submitPostData()完成了發(fā)送POST請求到服務(wù)器,并將該方法的返回值(服務(wù)器的響應(yīng)結(jié)果)顯示在了TextView控件中。
通過以上的代碼可以看出,在該方法中,其實完成了3件事:
(1)將用戶名密碼封裝成請求體,這是通過調(diào)用getRequestData()方法來實現(xiàn)的(后面會講到這個方法的具體實現(xiàn))。
(2)設(shè)置HttpURLConnection對象的各種參數(shù)(其實是設(shè)置HTTP協(xié)議請求體的各項參數(shù)),然后通過httpURLConnection.getOutputStream()方法獲得服務(wù)器輸出流outputStream,再使用outputStream.write()方法將請求體內(nèi)容發(fā)送給服務(wù)器。
(3)判斷服務(wù)器的響應(yīng)碼,通過httpURLConnection.getInputStream()方法獲得服務(wù)器的響應(yīng)輸入流,然后再調(diào)用dealResponseResult()方法處理服務(wù)器的響應(yīng)結(jié)果。
2.3封裝請求體
使用POST請求時,POST的參數(shù)不是放在URL字符串里,而是放在HTTP請求數(shù)據(jù)中,所以我們需要對POST的參數(shù)進行封裝。
針對該實例而言,我們發(fā)送的URL請求是:,但是我們需要將POST的參數(shù)(也就是username和password)封裝到該請求中,形成如下的形式:
2.4處理響應(yīng)結(jié)果
最后,我們再來看一看對服務(wù)器返回結(jié)果的處理是怎樣的。因為在本實例中,服務(wù)器的返回結(jié)果是字符串“Login succeeded!”或“Login failed!”,所以這里我們需要做的就是將服務(wù)器的返回結(jié)果輸入流轉(zhuǎn)化成字符串。當(dāng)然了,如果服務(wù)器返回的是圖片,那么,我們就需要就得到的輸入流轉(zhuǎn)化成Bitmap圖片了。如下代碼是上面代碼中用到的dealResponseResult()方法的具體實現(xiàn)。
2.5運行效果
1.來說下主程序MainActivity.java
public class MainActivity extends Activity {
private TableLayout table;
private Button select;
EmployeeDao dao = new EmployeeDao(this);
private Button add;
private Button update;
int selectedRow = 0;
int ActivityID=1;
ListEmployee list = new ArrayListEmployee();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
table = (TableLayout) this.findViewById(R.id.table);
table.setBackgroundColor(Color.GREEN);
//table.set
add = (Button) this.findViewById(R.id.add);
update = (Button) this.findViewById(R.id.update);
select = (Button) this.findViewById(R.id.select);
// 點擊查詢按鈕處理事件
// Toast.makeText(this, "已查詢過了!", Toast.LENGTH_SHORT).show();
select.setOnClickListener(new selectListener());
// 點擊添加按鈕事件處理,跳轉(zhuǎn)到另一個activity
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent();
i.setClass(MainActivity.this, AddAndUpdateActivity.class);
Bundle bundle=new Bundle();
ActivityID=1;
bundle.putInt("ID", ActivityID);
i.putExtras(bundle);
startActivity(i);
}
});
// 更新員工信息
update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent();
i.setClass(MainActivity.this, AddAndUpdateActivity.class);
Bundle bundle=new Bundle();
ActivityID=2;
bundle.putInt("ID", ActivityID);
bundle.putInt("emID", selectedRow);
i.putExtras(bundle);
startActivity(i);
}
});
}
// 查詢信息監(jiān)聽類
private class selectListener implements View.OnClickListener {
@Override
public void onClick(View v) {
list = dao.getAll();
if (list.size() != 0) {
for (int i = 0; i list.size(); i++) {
TableRow row = new TableRow(MainActivity.this);
Employee em = list.get(i);// 查找所有員工信息
// 設(shè)置行標(biāo)記
row.setId(em.getId());
row.setPadding(6, 1, 6, 1);
row.setGravity(Gravity.CENTER);
row.setBackgroundColor(Color.WHITE);
TextView view1 = new TextView(MainActivity.this);
view1.setText(Integer.toString(em.getId()));
view1.setGravity(Gravity.CENTER);//文本居中
view1.setTextSize((float) 18);文本大小
view1.setTextColor(Color.RED);
view1.setPadding(10, 2, 10, 2);//邊框左、上、右、下
row.addView(view1);添加一行
TextView view2 = new TextView(MainActivity.this);
view2.setText(em.getName());
view2.setTextSize((float) 18);
view2.setPadding(10, 2, 10, 2);
row.addView(view2);
TextView view3 = new TextView(MainActivity.this);
view3.setText(Integer.toString(em.getAge()));
view3.setTextSize((float) 18);
view3.setGravity(Gravity.CENTER);
view3.setPadding(10, 2, 10, 2);
row.addView(view3);
TextView view4 = new TextView(MainActivity.this);
view4.setText(em.getPosition());
view4.setTextSize((float) 18);
view4.setPadding(10, 2, 10, 2);
row.addView(view4);
TextView view5 = new TextView(MainActivity.this);
view5.setText(em.getDepartment());
view5.setTextSize((float) 18);
view5.setPadding(10, 2, 10, 2);
row.addView(view5);
TextView view6 = new TextView(MainActivity.this);
view6.setText(em.getWorkdate());
view6.setTextSize((float) 18);
view6.setPadding(10, 2, 10, 2);
row.addView(view6);
TextView view7 = new TextView(MainActivity.this);
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = format.parse(em.getWorkdate());
} catch (ParseException e) {
e.printStackTrace();
}
float d= (float)((new Date().getTime()-date.getTime())/(24*60*60*1000)/365);//計算工齡
String dd=Integer.toString((int) d+1);
view7.setText(dd);
view7.setTextSize((float) 18);
view7.setPadding(10, 2, 10, 2);
row.addView(view7);
table.addView(row);
row.setOnClickListener(new View.OnClickListener() {//點擊某行觸發(fā)事件
@Override
public void onClick(View v) {
System.out.println("行標(biāo)記:" + v.getId());
for (int i = 0; i table.getChildCount(); i++) {
if (table.getChildAt(i).getId() != v.getId())
table.getChildAt(i).setBackgroundColor(Color.WHITE);
// 選中時,高亮顯示即設(shè)置背景色
v.setBackgroundColor(Color.YELLOW);
}
selectedRow = v.getId();
AlertDialog.Builder dialog = new AlertDialog.Builder(
MainActivity.this);
dialog.setTitle("請確認(rèn):");
dialog.setMessage("是否刪除這條記錄?");
dialog.setPositiveButton("確定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(
DialogInterface dialog,int which) {
EmployeeDao dao = new EmployeeDao(MainActivity.this);
dao.delete(selectedRow);
Toast.makeText(MainActivity.this,
"刪除成功", Toast.LENGTH_SHORT).show();
Intent i = new Intent();
i.setClass(MainActivity.this,MainActivity.class);
startActivity(i);
}
});
dialog.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
dialog.cancel();
} });
dialog.show();
}
});
}
}
}
}
}
2.然后是添加和更新的界面,兩個功能使用同一個xml文件布局
RelativeLayout
android:background="#2691f2"
tools:context=".AddAndUpdateActivity"
TextView
android:id="@+id/t"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:textSize="25sp"
android:text="@string/addinfo"
android:textColor="#bc4b86" /
LinearLayout
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_below="@+id/t"
android:orientation="vertical"
TextView
android:layout_width="wrap_content"
android:layout_height="30dp" /
LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/name" /
EditText
android:id="@+id/nm"
android:inputType="text"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginLeft="25dp" /
/LinearLayout
LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/age" /
EditText
android:id="@+id/ag"
android:inputType="text"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginLeft="25dp" /
/LinearLayout
LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/position" /
EditText
android:id="@+id/pzs"
android:inputType="text"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginLeft="25dp" /
/LinearLayout
LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dptmt" /
EditText
android:id="@+id/dptmt"
android:inputType="text"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginLeft="25dp" /
/LinearLayout
LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/date" /
EditText
android:id="@+id/wkdt"
android:inputType="text"
android:layout_width="150dp"
android:layout_height="wrap_content" /
/LinearLayout
TextView
android:layout_width="wrap_content"
android:layout_height="20dp" /
Button
android:id="@+id/addnew"
android:layout_width="60dp"
android:layout_height="40dp"
android:layout_gravity="center_horizontal"
android:text="@string/add"
/Button
/LinearLayout
/RelativeLayout