嗨,我正在尝试做一个简单的HTTP post到一个基于PHP的服务器,它接受一个POST数据$_POST‘’username‘。
public void sendMessage(View view){
String result = "";
Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
Toast.makeText(
getApplicationContext(),
"Attempting to open second activity",
Toast.LENGTH_LONG
).show();
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("username","ghost"));
InputStream is = null;
// ATTEMPT HTTP POST
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://example.com/getuserbyuname");
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 (Reason: " + e.toString() + " )");
}然后服务器将返回JSON格式的消息,如下所示:
{"response":"404"}我和android.os.NetworkOnMainThread有点问题。我意识到这是因为我的例程试图从主UI线程中执行与网络相关的操作。
我确实试过这个:
public class AccountConnector extends AsyncTask <String, Integer, Long>{
@Override
protected Long doInBackground(String... params)
{
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("username","bond"));
InputStream is = null;
// ATTEMPT HTTP POST
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://example.com/getuserbyuname");
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 (Reason: " + e.toString() + " )");
}
return null;
}..。其余的代码将被省略...
谁能给我指个方向?
发布于 2013-07-26 19:38:53
加上这个..
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);将此文件放入清单文件中
<uses-permission android:name="android.permission.INTERNET"/>发布于 2013-07-26 19:40:42
解决此问题的正确方法是使用Android AsyncTask进行网络访问。
处理此问题的懒惰方法是打开以下检查:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);https://stackoverflow.com/questions/17880248
复制相似问题