編輯:關於Android編程
一、Main.xml
主要是2個Button和一個TextView。“設備注冊”點擊後即向服務器發送設備的MAC、HolderName等信息;“坐標傳送”則輸送設備從iBeacon獲取的坐標信息到服務器,經過定位算法處理後再從服務器傳回修正坐標信息(因篇幅有限,本節暫不提坐標信息是如何獲取的)。下面的TextView用於實時顯示狀態信息。其他的View主要用於實際調試。
二、建立HTTP連接
1、NetworkService類用於建立HTTP連接。
2、url_ip為服務器IP地址,
getPostResult()方法傳入的url為服務器定義的action,本文為"equipment_Register_VIPRegister_n.action"
package net.blogjava.mobile; import java.io.UnsupportedEncodingException; import java.util.List; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; 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.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.util.EntityUtils; import android.util.Log; public class NetworkService { private static String TAG = "NetworkService"; //private static String url_ip = ServerUrl.SERVER_ADRESS+"UserInfoServlet?"; private static String url_ip = "http://192.168.1.231:8080/indoor/"; /** * 釋放資源 */ public static void cancel() { Log.i(TAG, "cancel!"); // if(conn != null) { // conn.cancel(); // } } //無參數傳遞的 public static String getPostResult(String url){ url = url_ip + url; //創建http請求對象 HttpPost post = new HttpPost(url); //創建HttpParams以用來設置HTTP參數 BasicHttpParams httpParams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParams,10 * 1000); HttpConnectionParams.setSoTimeout(httpParams, 10 * 1000); //創建網絡訪問處理對象 HttpClient httpClient = new DefaultHttpClient(httpParams); try{ //執行請求參數?? HttpResponse response = httpClient.execute(post); //判斷是否請求成功 if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { //獲得響應信息 String content = EntityUtils.toString(response.getEntity()); return content; } else { //網連接失敗,使用Toast顯示提示信息 } }catch(Exception e) { e.printStackTrace(); return "{\"status\":405,\"resultMsg\":\"網絡超時!\"}"; } finally { //釋放網絡連接資源 httpClient.getConnectionManager().shutdown(); } return "{\"status\":405,\"resultMsg\":\"網絡超時!\"}"; } //有參數傳遞的 public static String getPostResult(String url, ListparamList){ UrlEncodedFormEntity entity = null; try { entity = new UrlEncodedFormEntity(paramList,"utf-8"); } catch (UnsupportedEncodingException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //創建http請求對象 HttpPost post = new HttpPost(url); BasicHttpParams httpParams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParams, 10 * 1000); HttpConnectionParams.setSoTimeout(httpParams, 10 * 1000); post.setEntity(entity); //創建網絡訪問處理對象 HttpClient httpClient = new DefaultHttpClient(httpParams); try{ //執行請求參數?? HttpResponse response = httpClient.execute(post); //判斷是否請求成功 if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { //獲得響應信息 String content = EntityUtils.toString(response.getEntity(),"UTF-8"); return content; } else { //網連接失敗,使用Toast顯示提示信息 } }catch(Exception e) { e.printStackTrace(); return "{\"status\":405,\"resultMsg\":\"網絡超時!\"}"; } finally { //釋放網絡連接資源 httpClient.getConnectionManager().shutdown(); } return "{\"status\":405,\"resultMsg\":\"網絡超時!\"}"; } }
1、定義List
ListparamList = new ArrayList (); paramList.add(new BasicNameValuePair("headTage","device")); paramList.add(new BasicNameValuePair("idmac",IDMAC)); paramList.add(new BasicNameValuePair("model",MODEL)); paramList.add(new BasicNameValuePair("holdername",HOLDERNAME));
2、調用NetworkService類裡面的getPostResult()方法:
String str =""; str = NetworkService.getPostResult(url, paramList);
3、Json解析服務器回饋的信息
(需自行下載並添加json的包)
import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.json.JSONTokener;
try { JSONTokener jsonParser = new JSONTokener(result); JSONObject responseobj = (JSONObject) jsonParser.nextValue(); if("failed".equals(responseobj.getString("errorMsg"))) { tvQueryResult.setText(responseobj.getString("resul")); //closeHeaderOrFooter(true); } else {tvQueryResult.setText("沒有數據"); } else {tvQueryResult.setText("數據獲取失敗"); } } catch (Exception e) {tvQueryResult.setText("數據獲取失敗"); }3、因http耗時需將設備注冊與左邊信息傳送放在異步線程裡來執行,否則會報異常
//注冊 class RegisterAsyncTask extends AsyncTask{ Context myContext; TextView tvQueryResult = (TextView) findViewById(R.id.tvQueryResult); public RegisterAsyncTask(Context context) { myContext = context; } @Override protected String doInBackground(String... params) { // TODO Auto-generated method stub try { resultData = InitData(); Thread.sleep(1000); } catch (Exception e) { } return resultData; } @Override protected void onPreExecute() { } protected String InitData() { String IDMAC=getLocalMacAddress(); String MODEL = android.os.Build.MODEL==null ?"未知":android.os.Build.MODEL; String HOLDERNAME = android.os.Build.USER==null ?"未知":android.os.Build.USER; String str =""; String url = "http://192.168.1.226:8080/indoor/equipment_Register_VIPRegister_n.action"; List paramList = new ArrayList (); paramList.add(new BasicNameValuePair("headTage","device")); paramList.add(new BasicNameValuePair("idmac",IDMAC)); paramList.add(new BasicNameValuePair("model",MODEL)); paramList.add(new BasicNameValuePair("holdername",HOLDERNAME)); str = NetworkService.getPostResult(url, paramList); Log.i("msg", str); return str; } protected void onPostExecute(String result) { try { JSONTokener jsonParser = new JSONTokener(result); JSONObject responseobj = (JSONObject) jsonParser.nextValue(); if("failed".equals(responseobj.getString("errorMsg"))) { tvQueryResult.setText(responseobj.getString("resul")); } else { tvQueryResult.setText("數據獲取失敗"); } } catch (Exception e) { tvQueryResult.setText("數據獲取失敗"); } } }
四、主程序
package net.blogjava.mobile; import java.util.ArrayList; import java.util.List; import org.json.JSONArray; import org.json.JSONObject; import org.json.JSONTokener; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import net.blogjava.mobile.NetworkService; import com.pojo.DeviceInfo; import com.pojo.PositionInput; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.content.Context; public class Main extends Activity implements OnClickListener { private String resultData; DeviceInfo device =new DeviceInfo(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btnGetQuery = (Button) findViewById(R.id.btnGetQuery); Button btnPostQuery = (Button) findViewById(R.id.btnPostQuery); btnGetQuery.setOnClickListener(this); btnPostQuery.setOnClickListener(this); RegisterDevice(); } @Override public void onClick(View view) { //String url = ""; TextView tvQueryResult = (TextView) findViewById(R.id.tvQueryResult); /* HttpResponse httpResponse = null; */ try { switch (view.getId()) { case R.id.btnGetQuery: tvQueryResult.setText("正在注冊..."); RegisterDevice(); break; case R.id.btnPostQuery: tvQueryResult.setText("傳送坐標信息..."); PositionPost(); break; } } catch (Exception e) { tvQueryResult.setText(e.getMessage()); } } //注冊按鈕執行事件 protected void RegisterDevice(){ //Toast.makeText(Main.this,"注冊中...", 1000).show(); //new AlertDialog.Builder(Main.this).setMessage("正在注冊...").create().show(); RegisterAsyncTask Register = new RegisterAsyncTask(this); Register.execute(""); //new AlertDialog.Builder(Main.this).setMessage("注冊成功").create().show(); } //坐標傳送按鈕執行事件 protected void PositionPost(){ PositionPostAsyncTask PositionPost = new PositionPostAsyncTask(this); PositionPost.execute(""); }; //注冊 class RegisterAsyncTask extends AsyncTask{ Context myContext; TextView tvQueryResult = (TextView) findViewById(R.id.tvQueryResult); public RegisterAsyncTask(Context context) { myContext = context; } @Override protected String doInBackground(String... params) { // TODO Auto-generated method stub try { resultData = InitData(); Thread.sleep(1000); } catch (Exception e) { } return resultData; } @Override protected void onPreExecute() { } protected String InitData() { String IDMAC=getLocalMacAddress(); String MODEL = android.os.Build.MODEL==null ?"未知":android.os.Build.MODEL; String HOLDERNAME = android.os.Build.USER==null ?"未知":android.os.Build.USER; String str =""; String url = "http://192.168.1.226:8080/indoor/equipment_Register_VIPRegister_n.action"; List paramList = new ArrayList (); paramList.add(new BasicNameValuePair("headTage","device")); paramList.add(new BasicNameValuePair("idmac",IDMAC)); paramList.add(new BasicNameValuePair("model",MODEL)); paramList.add(new BasicNameValuePair("holdername",HOLDERNAME)); str = NetworkService.getPostResult(url, paramList); Log.i("msg", str); return str; } protected void onPostExecute(String result) { try { JSONTokener jsonParser = new JSONTokener(result); JSONObject responseobj = (JSONObject) jsonParser.nextValue(); if("failed".equals(responseobj.getString("errorMsg"))) { tvQueryResult.setText(responseobj.getString("resul")); } else { tvQueryResult.setText("數據獲取失敗"); } } catch (Exception e) { tvQueryResult.setText("數據獲取失敗"); } } } //位置坐標傳送 class PositionPostAsyncTask extends AsyncTask { Context myContext; public PositionPostAsyncTask(Context context) { myContext = context; } @Override protected String doInBackground(String... params) { // TODO Auto-generated method stub try { resultData = InitData(); Thread.sleep(1000); } catch (Exception e) { } return resultData; } @Override protected void onPreExecute() { } protected String InitData() { PositionInput position=new PositionInput(); String str =""; String url = "equipment_Register_VIPRegister_n.action"; List paramList = new ArrayList (); paramList.add(new BasicNameValuePair("headTage","position")); paramList.add(new BasicNameValuePair("x",String.valueOf(position.getX()))); paramList.add(new BasicNameValuePair("y",String.valueOf(position.getY()))); paramList.add(new BasicNameValuePair("z",String.valueOf(position.getZ()))); str = NetworkService.getPostResult(url, paramList); Log.i("msg", str); return str; } protected void onPostExecute(String result) { try { JSONTokener jsonParser = new JSONTokener(result); JSONObject responseobj = (JSONObject) jsonParser.nextValue(); if("position".equals(responseobj.getString("headTage"))) { JSONArray neworderlist = responseobj.getJSONArray("response"); int length = neworderlist.length(); if (length > 0) { for(int i = 0; i < length; i++){//遍歷JSONArray JSONObject jo = neworderlist.getJSONObject(i); //解析為坐標信息 float x = Float.parseFloat(jo.getString("x")); float y = Float.parseFloat(jo.getString("y")); float z = Float.parseFloat(jo.getString("z")); } } else { } } else { } } catch (Exception e) { } } } public String getLocalMacAddress() { WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo info = wifi.getConnectionInfo(); return info.getMacAddress(); } }
本節引言: 嘿嘿,假如你們公司是做HTML5端的移動APP的,就是通過WebView來顯示網頁的,假如你訪問的網頁 不存在,或者其他錯誤,報404,401,4
代碼: //獲取控件尺寸(控件尺寸只有在事件裡面可以獲取到) TextView mTV = (TextView
首先給大家展示下效果圖:public class HomeEduMoreAdapter extends BaseAdapter {private final String
最近在處理一些lowmemorykiller相關的問題,於是對lowmemorykiller機制作了一個簡單的了解。在這裡總結一下。首先,是lowmemorykiller