我正在使用一个类来使用HTTP POST&通过php / json从数据库获取数据并将其转换为字符串。
问题是我得到了
LogCat中的"Error in http connection android.os.NetworkOnMainThreadException"
。我在模拟器上测试它,我使用正确的端口地址。我知道这是因为端口在应用程序的其他部分工作正常(从Localhost加载HTML)。如果我在桌面浏览器中运行php文件,它运行正常。我也知道在mySQL for 10.0.2.2&中正确设置了权限。用户在php登录文件中设置。
所以我的问题是:有没有人遇到同样的问题,如果有的话,你有没有想出问题是什么或者我应该寻找什么想法?
Thnx的帮助!
public void loadQuery(String p) {
String qO = getIntent().getStringExtra("QUERY_ORDER");
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
// http post
try {
HttpClient httpclient = new DefaultHttpClient();
// HttpPost httppost = new HttpPost("http://10.0.2.2/Andaero/php/" +
// p + qO + ".php");
//Hard coded the php link to make sure -->
HttpPost httppost = new HttpPost(
"http://10.0.2.2/Andaero/php/regulatory_list_ASC.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
} catch (Exception e) {
Log.e("log_tag", "Error in http connection " + e.toString());
}
// convert response to string
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
sb = new StringBuilder();
sb.append(reader.readLine() + "\n");
String line = "0";
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
Log.e("log_tag", "Error converting result " + e.toString());
}
setListAdapter(new QueryAdapter(this, result));
}
答案 0 :(得分:2)
您可能正在对应用程序的主线程进行网络操作(这是抛出该异常的常见原因)。
你永远不应该这样做。主线程应仅专用于用户交互,并且应将所有网络交互卸载到辅助线程(例如,使用AsyncTask)。
有关详细信息,请阅读: http://developer.android.com/guide/practices/design/responsiveness.html