1.掃描QR Code取得隱藏在QR Code內的token資料。
2.將token值透過HTTP Post傳至Server端,並取得Server回傳的資料。
3.取得回傳資料後做解析。
問題:
在要取得Server回傳資料時顯示錯誤訊息android.os.NetworkOnMainThreadException
解決方法:
自行新增一個Thread,本次使用的是AsyncTask。
原程式:
public class IndexGivePresentsQRCodeActivity extends Activity { ... // QR Code傳回結果 protected void onActivityResult(int requestCode, int resultCode, Intent intent) { // ...處理方法... sendPostDataToInternet(); // ...處理方法... } private void sendPostDataToInternet() { // 建立HTTP Post連線 HttpPost httppost = new HttpPost(getResources().getString(R.string.PhpData)); // Post運作傳送變數 必需用NameValuePair陣列儲存 List nameValuePairs = new ArrayList(1); // 新增變數(Key,value) nameValuePairs.add(new BasicNameValuePair("token", tokenStr)); try { // 發送HTTP Request httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,HTTP.UTF_8)); // 此行會出現錯誤 // 取得HTTP Respense (Execute HTTP Post Request) HttpResponse response = new DefaultHttpClient().execute(httppost); // 取得回傳字串 HttpEntity entity = response.getEntity(); sendResult = EntityUtils.toString(entity); // ...資料處理... } catch(Exception e) { // ...Error處理... } } ... }
修改後程式:
public class IndexGivePresentsQRCodeActivity extends Activity { ... // QR Code傳回結果 protected void onActivityResult(int requestCode, int resultCode, Intent intent) { // ...處理方法... new Connection().execute(); // ...處理方法... } private class Connection extends AsyncTask { @Override protected Object doInBackground(Object... params) { // TODO Auto-generated method stub sendPostDataToInternet(); return null; } } private void sendPostDataToInternet() { // 建立HTTP Post連線 HttpPost httppost = new HttpPost(getResources().getString(R.string.PhpData)); // Post運作傳送變數 必需用NameValuePair陣列儲存 List nameValuePairs = new ArrayList(1); // 新增變數(Key,value) nameValuePairs.add(new BasicNameValuePair("token", tokenStr)); try { // 發送HTTP Request httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,HTTP.UTF_8)); // 此行會出現錯誤 // 取得HTTP Respense (Execute HTTP Post Request) HttpResponse response = new DefaultHttpClient().execute(httppost); // 取得回傳字串 HttpEntity entity = response.getEntity(); sendResult = EntityUtils.toString(entity); // ...資料處理... } catch(Exception e) { // ...Error處理... } } ... }