android中的Get方法问题
我在php中创建了类似get的参数,并使用get方法提交到链接。例如:“ 如果用户键入edittext(例如aa@gmail.com)和提交,它将作为 。怎么样 在android中可能吗 我试着用这个例子。但它的力量关闭了 代码如下:android中的Get方法问题,android,android-layout,android-intent,android-emulator,Android,Android Layout,Android Intent,Android Emulator,我在php中创建了类似get的参数,并使用get方法提交到链接。例如:“ 如果用户键入edittext(例如aa@gmail.com)和提交,它将作为 。怎么样 在android中可能吗 我试着用这个例子。但它的力量关闭了 代码如下: EditText Ename; Button btncreate; String n = null; String contentOfMyInputStream1; String output = null; @Override protected void o
EditText Ename;
Button btncreate;
String n = null;
String contentOfMyInputStream1;
String output = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Ename = (EditText)findViewById(R.id.msgTextField);
btncreate = (Button)findViewById(R.id.sendButton);
btncreate.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
String st1;
st1 = Ename.getText().toString();
try {
output = "http://example.com/subscribe/?act=SubscribeForEmail&EmailAddress="+st1;
downloadUrl(output);//request been send
}
catch (IOException e) {
e.printStackTrace();
}
if (output != null) {
Toast.makeText(this, output, Toast.LENGTH_SHORT).show();
}
}
public String downloadUrl(String url) throws IOException {
HttpClient httpclient = new DefaultHttpClient();
HttpRequestBase httpRequest = null;
HttpResponse httpResponse = null;
InputStream inputStream = null;
String response = "";
StringBuffer buffer = new StringBuffer();
httpRequest = new HttpGet(url);
httpResponse = httpclient.execute(httpRequest);
inputStream = httpResponse.getEntity().getContent();
int contentLength = (int) httpResponse.getEntity().getContentLength();
if (contentLength < 0) {
// Log.e(TAG, "The HTTP response is too long.");
}
byte[] data = new byte[256];
int len = 0;
while (-1 != (len = inputStream.read(data)) ) {
buffer.append(new String(data, 0, len));
}
inputStream.close();
response = buffer.toString();
return response;
}
请帮我解决这个问题
提前感谢。Android不允许您在主(UI)线程上执行耗时较长的任务(如网络操作)。如果需要发出http请求,则需要在单独的线程上创建它
可以使用AsyncTask,也可以在新线程中生成它 Android不允许您在主(UI)线程上执行耗时较长的任务(如网络操作)。如果需要发出http请求,则需要在单独的线程上创建它
可以使用AsyncTask,也可以在新线程中生成它 就像
异常告诉您的那样简单。您可以在主线程上运行网络工具。使用AsyncTask
或new-Thread
执行downloadUrl
方法
使用以下示例代码,摘自:
也可能有帮助。就像异常告诉您的那样简单。您可以在主线程上运行网络工具。使用AsyncTask
或new-Thread
执行downloadUrl
方法
使用以下示例代码,摘自:
也可能有帮助。您无法在Honeycombe上的UI线程上执行网络IO。从技术上讲,这在早期版本的Android上是可能的,但这是一个非常糟糕的主意,因为它会导致你的应用程序停止响应,并可能导致操作系统因为你的应用程序表现不好而杀死你的应用程序。您需要运行后台进程或使用AsyncTask在后台线程上执行网络事务
Android开发者网站上有一篇关于这方面的文章,这是一篇很好的介绍,它将为您提供比这里实际提供的更深入的答案。您不能在Honeycombe上的UI线程上执行网络IO。从技术上讲,这在早期版本的Android上是可能的,但这是一个非常糟糕的主意,因为它会导致你的应用程序停止响应,并可能导致操作系统因为你的应用程序表现不好而杀死你的应用程序。您需要运行后台进程或使用AsyncTask在后台线程上执行网络事务
Android开发者网站上有一篇关于这方面的文章,这是一篇很好的介绍,它将为您提供比这里实际提供的答案更深入的答案
Fatal Exception:main
android.os.NetworkOnMainTreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
at java.net.InetAddress.lookHostByName(InetAddress.java:385)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:385)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
private class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
//Here you put your downloadUrl() method.
//because this method does stuff in background
return downloadUrl(params[0])
}
@Override
protected void onPostExecute(String output) {
//after downloading is finished, toast it.
if (output != null)
Toast.makeText(this, output, Toast.LENGTH_SHORT).show();
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
LongOperation downloadTask = new LongOperation();
downloadTask.execute(output);