Java 试图使用HTTPPost和HTTPGet在Android中创建登录应用程序,但登录已停止

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

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-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