Android 模擬器測試遠程服務器成功,但是到真機上測試一點反應沒有的解決辦法
問題描述:android客戶端,.net服務器,我是使用webservice交互。使用登陸模塊測試,轉遞用戶名和密碼,請求成功與否接口都會返回json數據信息。在模擬器上測試,一切都正常,然后放到手機里面測試,怪了,一點返回數據都沒有,不管是成功還是失敗都沒有返回任何數據。
原因:根據調試信息,截圖如下:

可以知道,原因就是不能在主線程里面訪問網絡,網絡請求不應該在主線程中進行,這樣會阻塞主線程。要另外開一耳光線程來做網絡請求。
解決方法,把網絡請求的代碼放到新開的線程中執行。我的解決代碼如下:
new Thread(){
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
//定義登錄需要的參數名和參數值
String[] paramsName={"UserName","md5Password","DBName","Server"};
String[] paramsValue={loginName.getText().toString(),MD5.getMD5ofStr(loginPwd.getText().toString()),loginDatabase.getSelectedItem().toString(),loginServer.getSelectedItem().toString()};
//使用webservice請求登錄,返回json字符串信息
String result=WebServiceUtil.getDataByParams(Commom.uri,paramsName,paramsValue);
Message message=new Message();
Bundle bundle=new Bundle();
bundle.putString("result", result);
message.setData(bundle);
handler.sendMessage(message);
}
}.start();
handler=new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
resultString=msg.getData().getString("result");
Log.i("Thread()--resultString:", resultString);
//定義解析json信息后放入map中的key名,需要和返回的json中的key相同
String[] xkeys= new String[] { "UserID", "LoginName", "UserName"};
//調用JsonParse.JsonStrParse3方法解析json,并返回list
ArrayList<HashMap<String, Object>> loginInfo=JsonParse.JsonStrParse3(resultString, xkeys);
//如果返回的失敗的信息,則ArrayList中沒有任何的元素,否則ArrayList中就是上面定義的xkeys對應的value信息
if (loginInfo!=null&&loginInfo.size()!=0&&!loginInfo.get(0).toString().trim().equals("")) {
//把登陸信息保存在Application里面,只標注是否已經登陸
((MyApplication)getApplication()).setUserId(loginInfo.get(0).get("UserID").toString());
((MyApplication)getApplication()).setLoginName(loginInfo.get(0).get("LoginName").toString());
((MyApplication)getApplication()).setUserName(loginInfo.get(0).get("UserName").toString());
//登錄成功后,跳轉到住界面
startActivity(new Intent(LoginActivity.this,MainActivity.class));
}else {
Toast.makeText(LoginActivity.this, "登錄失敗", Toast.LENGTH_SHORT).show();
}
}
};
好了,運行測試,一切都ok啦。

浙公網安備 33010602011771號