Android HttpPost无法执行

时间:2015-03-03 17:05:19

标签: java android post

我在Android项目中创建了一个活动,其中包含两个editText字段和一个按钮。该按钮用于将字段的值发布到服务器以检查登录。我已经建立了一个"模板"系统只是试图从服务器获得响应。我在本地构建它并在本地测试它。我得到的只是"无法执行活动的方法"

这里有一些代码:

public void attemptLogin(View view) {

    context = getApplicationContext();
    toastMsg = "Attempting Login";

    Toast toast = Toast.makeText(context, toastMsg, duration);

    editText = (EditText)findViewById(R.id.username);
    username = editText.getText().toString();

    editText = (EditText)findViewById(R.id.password);
    password = editText.getText().toString();

    int username_length = username.length();
    int password_length = password.length();

    if(username_length != 0 || password_length != 0) {

        HttpClient httpClient = new DefaultHttpClient();

        HttpPost httpPost = new HttpPost("http://10.1.55.6:8888/Testing/Android/php/login.php");
        List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
        nameValuePair.add(new BasicNameValuePair("username","value"));
        nameValuePair.add(new BasicNameValuePair("password","value"));

        try {

            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));

        } catch (UnsupportedEncodingException e){

            e.printStackTrace();

        }

        try {

            HttpResponse response = httpClient.execute(httpPost);

            Log.d("Http Post Response:", response.toString());

        } catch (ClientProtocolException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        }


    } else {

        username = "IT IS EMPTY!";
        password = "IT IS EMPTY!";

    }

    Log.v("Username:", username);
    Log.v("Password:", password);

}

和错误日志

03-03 16:52:33.891    2212-2212/com.ak273.chefs E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.ak273.chefs, PID: 2212
java.lang.IllegalStateException: Could not execute method of the activity
        at android.view.View$1.onClick(View.java:3823)
        at android.view.View.performClick(View.java:4438)
        at android.view.View$PerformClick.run(View.java:18422)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5001)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at android.view.View$1.onClick(View.java:3818)
        at android.view.View.performClick(View.java:4438)
        at android.view.View$PerformClick.run(View.java:18422)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5001)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)
Caused by: android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
        at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
        at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
        at libcore.io.IoBridge.connect(IoBridge.java:112)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
        at java.net.Socket.connect(Socket.java:843)
        at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
        at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
        at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
        at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
        at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
        at com.ak273.chefs.loginActivity.attemptLogin(loginActivity.java:83)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at android.view.View$1.onClick(View.java:3818)
        at android.view.View.performClick(View.java:4438)
        at android.view.View$PerformClick.run(View.java:18422)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5001)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

这是您需要的AsyncTask。 你应该把你的http请求方法放在doInBackground(Void ... params)


public class MyAsyncTask extends AsyncTask<Void, Void, String> {


   @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub

    }
    @Override
    protected String doInBackground(Void... params) {
     // TODO Auto-generated method stub

        return null;
    }

    @Override
    protected void onPostExecute(String result) {
     // TODO Auto-generated method stub

        super.onPostExecute(result);

    }
}

答案 1 :(得分:0)

Android旨在防止使用主线程进行网络调用。您需要使用您创建的后台线程或使用AsyncTask来运行网络请求。

我建议您使用AsyncTask来满足您的需求。我们将此作为参考http://developer.android.com/reference/android/os/AsyncTask.html

答案 2 :(得分:-1)