Java 试图使用HTTPPost和HTTPGet在Android中创建登录应用程序,但登录已停止
Webservices调用往往会占用时间,从而阻塞UI线程,因此不应从主线程调用。作为最佳实践的Webservice调用应始终仅从异步任务调用 下面是未经测试的代码。希望你能对这段代码有个大致的了解Java 试图使用HTTPPost和HTTPGet在Android中创建登录应用程序,但登录已停止,java,android,http,Java,Android,Http,Webservices调用往往会占用时间,从而阻塞UI线程,因此不应从主线程调用。作为最佳实践的Webservice调用应始终仅从异步任务调用 下面是未经测试的代码。希望你能对这段代码有个大致的了解 06-10 13:42:29.670: E/AndroidRuntime(797): FATAL EXCEPTION: main 06-10 13:42:29.670: E/AndroidRuntime(797): Process: com.example.login, PID: 797 06-1
06-10 13:42:29.670: E/AndroidRuntime(797): FATAL EXCEPTION: main
06-10 13:42:29.670: E/AndroidRuntime(797): Process: com.example.login,
PID: 797 06-10 13:42:29.670: E/AndroidRuntime(797):
java.lang.IllegalStateException: Could not execute method of the
activity 06-10 13:42:29.670: E/AndroidRuntime(797): at
android.view.View$1.onClick(View.java:3823) 06-10 13:42:29.670:
E/AndroidRuntime(797): at
android.view.View.performClick(View.java:4438) 06-10 13:42:29.670:
E/AndroidRuntime(797): at
android.view.View$PerformClick.run(View.java:18422) 06-10
13:42:29.670: E/AndroidRuntime(797): at
android.os.Handler.handleCallback(Handler.java:733) 06-10
13:42:29.670: E/AndroidRuntime(797): at
android.os.Handler.dispatchMessage(Handler.java:95) 06-10
13:42:29.670: E/AndroidRuntime(797): at
android.os.Looper.loop(Looper.java:136) 06-10 13:42:29.670:
E/AndroidRuntime(797): at
android.app.ActivityThread.main(ActivityThread.java:5017) 06-10
13:42:29.670: E/AndroidRuntime(797): at
java.lang.reflect.Method.invokeNative(Native Method) 06-10
13:42:29.670: E/AndroidRuntime(797): at
java.lang.reflect.Method.invoke(Method.java:515) 06-10 13:42:29.670:
E/AndroidRuntime(797): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
06-10 13:42:29.670: E/AndroidRuntime(797): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 06-10
13:42:29.670: E/AndroidRuntime(797): at
dalvik.system.NativeStart.main(Native Method) 06-10 13:42:29.670:
E/AndroidRuntime(797): Caused by:
java.lang.reflect.InvocationTargetException 06-10 13:42:29.670:
E/AndroidRuntime(797): at
java.lang.reflect.Method.invokeNative(Native Method) 06-10
13:42:29.670: E/AndroidRuntime(797): at
java.lang.reflect.Method.invoke(Method.java:515) 06-10 13:42:29.670:
E/AndroidRuntime(797): at android.view.View$1.onClick(View.java:3818)
06-10 13:42:29.670: E/AndroidRuntime(797): ... 11 more 06-10
13:42:29.670: E/AndroidRuntime(797): Caused by:
android.os.NetworkOnMainThreadException 06-10 13:42:29.670:
E/AndroidRuntime(797): at
android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
06-10 13:42:29.670: E/AndroidRuntime(797): at
java.net.InetAddress.lookupHostByName(InetAddress.java:385) 06-10
13:42:29.670: E/AndroidRuntime(797): at
java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 06-10
13:42:29.670: E/AndroidRuntime(797): at
java.net.InetAddress.getAllByName(InetAddress.java:214) 06-10
13:42:29.670: E/AndroidRuntime(797): at
org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
06-10 13:42:29.670: E/AndroidRuntime(797): at
org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
06-10 13:42:29.670: E/AndroidRuntime(797): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
06-10 13:42:29.670: E/AndroidRuntime(797): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
06-10 13:42:29.670: E/AndroidRuntime(797): at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
06-10 13:42:29.670: E/AndroidRuntime(797): at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
06-10 13:42:29.670: E/AndroidRuntime(797): at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
06-10 13:42:29.670: E/AndroidRuntime(797): at
com.example.login.Testcase.xxx(Testcase.java:57) 06-10 13:42:29.670:
E/AndroidRuntime(797): ... 14 more
公共类MainActivity扩展活动
{
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
..//这里有一些代码
//异步任务也可以从onclick代码中调用。
新建AsyncTaskOperation().execute(“”);
}
/*调用异步任务以避免主线程上的Android网络异常。Web服务只需在后台使用*/
私有类AsyncTaskOperation扩展了AsyncTask
{
private ProgressDialog=新建ProgressDialog(LoginActivity.this);
字符串ciao=“”;
受保护的void onPreExecute(){
//显示加载微调器
setMessage(“正在加载…请稍候…”);
setProgressStyle(ProgressDialog.STYLE_微调器);
对话框.setInverseBackgroundForced(false);
对话框。可设置可取消(false);
setUndeterminatedRavable(getResources().getDrawable(R.drawable.progressbar_new));
Dialog.show();
}
@凌驾
受保护的Void doInBackground(字符串…paramsObj){
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(
"http://www.masterkool.com/callcenter/index.php");
List nameValuePairs=新的ArrayList(2);
添加(新的BasicNameValuePair(“a_用户”,user.getText())
.toString());
添加(新的BasicNameValuePair(“a_pass”,pass.getText())
.toString());
试一试{
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
HttpResponse execute=httpclient.execute(httppost);
输入流内容;
content=execute.getEntity().getContent();
BufferedReader buffer=新的BufferedReader(新的InputStreamReader(
内容),;
字符串s=“”;
字符串测试=”;
而((s=buffer.readLine())!=null){
测试+=s;
}
如果(测试包含(“U”)){
//重置字段和toast
Toast.makeText(getBaseContext(),“登录失败”,Toast.LENGTH\u SHORT)
.show();
}否则{
//意向意向=新意向(MainActivity.this,Form.class);
//这一点。触觉(意图);
Toast.makeText(getBaseContext(),“登录成功”,
吐司。长度(短)。show();
}
}捕获(非法状态){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回null;
}
受保护的void onPostExecute(未使用的void)
{
//关闭进度对话框
Dialog.dismise();
//在HTTPGet或POST方法结束后执行操作
}//方法onPostExecute的结尾
}//类结束AsyncTaskOperation
}活动结束
您正在用户界面上运行网络操作。使用线程、异步任务或截击。
06-10 13:42:29.670: E/AndroidRuntime(797): FATAL EXCEPTION: main
06-10 13:42:29.670: E/AndroidRuntime(797): Process: com.example.login,
PID: 797 06-10 13:42:29.670: E/AndroidRuntime(797):
java.lang.IllegalStateException: Could not execute method of the
activity 06-10 13:42:29.670: E/AndroidRuntime(797): at
android.view.View$1.onClick(View.java:3823) 06-10 13:42:29.670:
E/AndroidRuntime(797): at
android.view.View.performClick(View.java:4438) 06-10 13:42:29.670:
E/AndroidRuntime(797): at
android.view.View$PerformClick.run(View.java:18422) 06-10
13:42:29.670: E/AndroidRuntime(797): at
android.os.Handler.handleCallback(Handler.java:733) 06-10
13:42:29.670: E/AndroidRuntime(797): at
android.os.Handler.dispatchMessage(Handler.java:95) 06-10
13:42:29.670: E/AndroidRuntime(797): at
android.os.Looper.loop(Looper.java:136) 06-10 13:42:29.670:
E/AndroidRuntime(797): at
android.app.ActivityThread.main(ActivityThread.java:5017) 06-10
13:42:29.670: E/AndroidRuntime(797): at
java.lang.reflect.Method.invokeNative(Native Method) 06-10
13:42:29.670: E/AndroidRuntime(797): at
java.lang.reflect.Method.invoke(Method.java:515) 06-10 13:42:29.670:
E/AndroidRuntime(797): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
06-10 13:42:29.670: E/AndroidRuntime(797): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 06-10
13:42:29.670: E/AndroidRuntime(797): at
dalvik.system.NativeStart.main(Native Method) 06-10 13:42:29.670:
E/AndroidRuntime(797): Caused by:
java.lang.reflect.InvocationTargetException 06-10 13:42:29.670:
E/AndroidRuntime(797): at
java.lang.reflect.Method.invokeNative(Native Method) 06-10
13:42:29.670: E/AndroidRuntime(797): at
java.lang.reflect.Method.invoke(Method.java:515) 06-10 13:42:29.670:
E/AndroidRuntime(797): at android.view.View$1.onClick(View.java:3818)
06-10 13:42:29.670: E/AndroidRuntime(797): ... 11 more 06-10
13:42:29.670: E/AndroidRuntime(797): Caused by:
android.os.NetworkOnMainThreadException 06-10 13:42:29.670:
E/AndroidRuntime(797): at
android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
06-10 13:42:29.670: E/AndroidRuntime(797): at
java.net.InetAddress.lookupHostByName(InetAddress.java:385) 06-10
13:42:29.670: E/AndroidRuntime(797): at
java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 06-10
13:42:29.670: E/AndroidRuntime(797): at
java.net.InetAddress.getAllByName(InetAddress.java:214) 06-10
13:42:29.670: E/AndroidRuntime(797): at
org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
06-10 13:42:29.670: E/AndroidRuntime(797): at
org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
06-10 13:42:29.670: E/AndroidRuntime(797): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
06-10 13:42:29.670: E/AndroidRuntime(797): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
06-10 13:42:29.670: E/AndroidRuntime(797): at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
06-10 13:42:29.670: E/AndroidRuntime(797): at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
06-10 13:42:29.670: E/AndroidRuntime(797): at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
06-10 13:42:29.670: E/AndroidRuntime(797): at
com.example.login.Testcase.xxx(Testcase.java:57) 06-10 13:42:29.670:
E/AndroidRuntime(797): ... 14 more
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
.... // Some code here
// Async task can also be called from within an onclick code.
new AsyncTaskOperation().execute("");
}
/* Async Task called to avoid Android Network On Main Thread Exception. Web services need to be consumed only in background. */
private class AsyncTaskOperation extends AsyncTask <String, Void, Void>
{
private ProgressDialog Dialog = new ProgressDialog(LoginActivity.this);
String ciao="";
protected void onPreExecute() {
// Display the loading spinner
Dialog.setMessage("Loading... Please wait.. ");
Dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
Dialog.setInverseBackgroundForced(false);
Dialog.setCancelable(false);
Dialog.setIndeterminateDrawable(getResources().getDrawable(R.drawable.progressbar_new));
Dialog.show();
}
@Override
protected Void doInBackground(String... paramsObj) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(
"http://www.masterkool.com/callcenter/index.php");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("a_user", user.getText()
.toString()));
nameValuePairs.add(new BasicNameValuePair("a_pass", pass.getText()
.toString()));
try {
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse execute = httpclient.execute(httppost);
InputStream content;
content = execute.getEntity().getContent();
BufferedReader buffer = new BufferedReader(new InputStreamReader(
content));
String s = "";
String test = "";
while ((s = buffer.readLine()) != null) {
test += s;
}
if (test.contains("U")) {
// reset field and toast
Toast.makeText(getBaseContext(), "Login Failed", Toast.LENGTH_SHORT)
.show();
} else {
// Intent intent = new Intent(MainActivity.this,Form.class);
// this.startActivity(intent);
Toast.makeText(getBaseContext(), "Login Successful",
Toast.LENGTH_SHORT).show();
}
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void unused)
{
// Close progress dialog
Dialog.dismiss();
// Do actions after end of the HTTPGet or POST Method
} // End of method onPostExecute
} // End of class AsyncTaskOperation
} End of MainActivity