操作步驟:
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處理...
}
}
...
}