- POST:將資料用namevaluepair的方式送出。
- GET :將資料加在網址後面送出。
下列範例搭配AsyncTask實作。
AsyncTask:不影響main UI介面獨立執行緒,通常在doInBackground()做事情,
做完後會跑onPostExecute(),在這邊做一些做完的動作(關dialog等等)。
public class Lewis extends Activity {
public static final int DIALOG_LOGIN_PROGRESS = 2;
private ProgressDialog mpDialog = null;
private EditText user, password;
private Button login;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
context = this;
user = (EditText) findViewById(R.id.editText1);
password = (EditText) findViewById(R.id.editText2);
login = (Button) findViewById(R.id.login);
login.setOnClickListener(loginoOnClickListener);
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_LOGIN_PROGRESS:
mpDialog = new ProgressDialog(Lewis.this);
mpDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mpDialog.setTitle("登入中");
mpDialog.setMessage("wait");
mpDialog.setIndeterminate(false);
mpDialog.setCancelable(false);
mpDialog.setProgress(0);
mpDialog.incrementProgressBy(1);
mpDialog.show();
return mpDialog;
default: {
return null;
}
}
}
private Button.OnClickListener loginoOnClickListener = new Button.OnClickListener() {
public void onClick(View arg0) {
showDialog(DIALOG_LOGIN_PROGRESS);
//GET方法
UserLoginTask_GET mAuthTask = new UserLoginTask_GET();
mAuthTask.execute(user.getText().toString().trim(), password
.getText().toString().trim());
//POST方法
UserLoginTask_POST mAuthTask = new UserLoginTask_POST();
mAuthTask.execute(user.getText().toString().trim(), password
.getText().toString().trim());
}
};
public class UserLoginTask_GET extends AsyncTask> {
@Override
protected void onPostExecute(final ArrayList status_result) {
mpDialog.cancel();
if (status_result.get(0).equals("yes")) {
// 帳密正確且登入完成後這邊做你要做的事情。
} else {
AlertDialog.Builder delAlertDialog = new AlertDialog.Builder(
Lewis.this);
delAlertDialog.setTitle("帳號密碼錯誤");
// 自定義dialog的位置
Window window = delAlertDialog.show().getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.alpha = 0.6f;
lp.width = 300;
window.setGravity(Gravity.CENTER); // window.setGravity(Gravity.BOTTOM);
window.setAttributes(lp);
user.setText("");
password.setText("");
}
}
@Override
protected ArrayList doInBackground(String... login) {
HttpClient client = new DefaultHttpClient();
String url = "your webservice url";
HttpGet get = new HttpGet(url + "?" + "username=" + login[0] + "&"
+ "password=" + login[1] + "&" + "project_type=lewis");
String result = null;
ArrayList statusResult = new ArrayList();
statusResult.add("no");
Log.e("login[0]", login[0] + "---" + login[1]);
try {
HttpResponse response = client.execute(get);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
result = EntityUtils.toString(resEntity, HTTP.UTF_8);
statusResult.set(0, "yes");// 代表帳密正確(經由你的webservice判斷)
}
} else {
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
result = EntityUtils.toString(resEntity, HTTP.UTF_8);
statusResult.set(0, "no");
}
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
statusResult.add(result);
if (statusResult.get(0).equals("yes")) {
return statusResult;
} else {
return statusResult;
}
}
}
public class UserLoginTask_POST extends AsyncTask> {
@Override
protected void onPostExecute(final ArrayList status_result) {
mpDialog.cancel();
if (status_result.get(0).equals("yes")) {
// 帳密正確且登入完成後這邊做你要做的事情。
} else {
AlertDialog.Builder delAlertDialog = new AlertDialog.Builder(
Lewis.this);
delAlertDialog.setTitle("帳號密碼錯誤");
// 自定義dialog的位置
Window window = delAlertDialog.show().getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.alpha = 0.6f;
lp.width = 300;
window.setGravity(Gravity.CENTER); // window.setGravity(Gravity.BOTTOM);
window.setAttributes(lp);
user.setText("");
password.setText("");
}
}
@Override
protected ArrayList doInBackground(String... login) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("your webservice url");
String result = null;
ArrayList statusResult = new ArrayList();
statusResult.add("no");
try {
List nameValuePairs = new ArrayList(2);
nameValuePairs.add(new BasicNameValuePair("username", userId));
nameValuePairs.add(new BasicNameValuePair("password", password));
nameValuePairs.add(new BasicNameValuePair("project_type", "Lewis"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,HTTP.UTF_8));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
result = EntityUtils.toString(resEntity, HTTP.UTF_8);
statusResult.set(0, "yes");// 代表帳密正確(經由你的webservice判斷)
}
} else {
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
result = EntityUtils.toString(resEntity, HTTP.UTF_8);
statusResult.set(0, "no");
}
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
statusResult.add(result);
if (statusResult.get(0).equals("yes")) {
return statusResult;
} else {
return statusResult;
}
}
}
}
沒有留言:
張貼留言