我正在尝试通过android studio中的java发送帖子请求到我的PHP页面
我在eclipse中尝试了相同的代码,但同样的问题显示,应用程序停止工作。
我在清单中放了互联网许可。
我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView txt=(TextView) findViewById(R.id.textView1);
String mail="aa@gmail.com",pass="pass";
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://10.0.2.2:8888/LoginTest/login.php");
try {
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(1);
nameValuePair.add(new BasicNameValuePair("mail", mail));
nameValuePair.add(new BasicNameValuePair("pass", pass));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
HttpResponse response= httpClient.execute(httpPost);
InputStream is= response.getEntity().getContent();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
StringBuilder sb=new StringBuilder();
String line=null;
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
txt.setText(sb.toString());
br.close();
}
catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我的LogCat:https://www.dropbox.com/s/smhyoxdob66czr7/testLogCat.txt?dl=0
答案 0 :(得分:2)
最有可能的是,您的应用程序因异常而崩溃,即android.os.NetworkOnMainThreadException
当您尝试执行冗长的耗时任务(如网络请求和在主线程上下载响应)时会引发此异常,就像您在onCreate()
中所做的那样。 Android并不喜欢它。它使它保持冻结/无响应,这使它生气并且它会杀死你的应用程序。
使用AsyncTask
的解决方案。这个想法是在后台线程而不是主线程中完成冗长的任务。如下:
//this should be inside your Activity class
private class NetworkRequestTask extends AsyncTask<Void, Void, String>{
@Override
protected String doInBackground(Void... params) {
// your network code here
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
// set the result to your label
}
}
并从你的onCreate()调用此任务如下:
new NetworkRequestTask(). execute();
它会让android变得快乐和敏感。它会让您的应用运行并且不会杀死它。