【问题标题】:Http Post Request stops process [duplicate]Http Post请求停止进程[重复]
【发布时间】:2014-01-17 11:15:52
【问题描述】:

编辑:除了下面的答案

我走到了尽头。我找了很多简单的 http post 请求的例子,但我就是无法让它工作......

我的要求其实很简单:“我做错了什么?”

当我测试应用时,它显示“不幸的是已停止”

我会给你必要的代码:

我所有的导入

import android.graphics.Typeface;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
import android.widget.TextView;
import android.widget.Button;
import android.widget.Toast;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

必要的mainactivity.java函数

public void sync_btn_click(View v) {
        //Sync button click
        boolean varif = postData("hans");
        Toast.makeText(getApplicationContext(), String.valueOf(varif), Toast.LENGTH_SHORT).show();
    }

public boolean postData(String verif_code) {
    //Make new requesting clients
    HttpClient sync_client = new DefaultHttpClient();
    HttpPost get_verif = new HttpPost("http://www.google.nl");

    // Building post parameters, key and value pair
    List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
    nameValuePair.add(new BasicNameValuePair("email", "user@gmail.com"));
    nameValuePair.add(new BasicNameValuePair("password", "encrypted_password"));

    //Encode post values
    try{
        get_verif.setEntity(new UrlEncodedFormEntity(nameValuePair));
    }catch (UnsupportedEncodingException e) {
        // writing error to Log
        e.printStackTrace();
    }

    //Make http request
    try {
        HttpResponse response = sync_client.execute(get_verif);

        // writing response to log
        Log.d("Http Response:", response.toString());

        return true;
    } catch (ClientProtocolException e) {
        // writing exception to log
        e.printStackTrace();

        return false;
    } catch (IOException e) {
        // writing exception to log
        e.printStackTrace();

        return false;
    }
}

我的 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.scridge.scridge" >

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.scridge.scridge.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>

</manifest>

错误日志

01-17 11:03:37.578    2977-2977/com.scridge.scridge E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.IllegalStateException: Could not execute method of the activity
            at android.view.View$1.onClick(View.java:3633)
            at android.view.View.performClick(View.java:4240)
            at android.view.View$PerformClick.run(View.java:17721)
            at android.os.Handler.handleCallback(Handler.java:730)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            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:525)
            at android.view.View$1.onClick(View.java:3628)
            at android.view.View.performClick(View.java:4240)
            at android.view.View$PerformClick.run(View.java:17721)
            at android.os.Handler.handleCallback(Handler.java:730)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.os.NetworkOnMainThreadException
            at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1133)
            at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
            at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
            at java.net.InetAddress.getAllByName(InetAddress.java:214)
            at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
            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.scridge.scridge.MainActivity.postData(MainActivity.java:88)
            at com.scridge.scridge.MainActivity.sync_btn_click(MainActivity.java:64)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at android.view.View$1.onClick(View.java:3628)
            at android.view.View.performClick(View.java:4240)
            at android.view.View$PerformClick.run(View.java:17721)
            at android.os.Handler.handleCallback(Handler.java:730)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)

我觉得这不是请求,而是别的什么。但我真的不知道是什么。

提前致谢,

鲁德

答案的补充 感谢 Jitesh Upadhyay,我找到了答案。我没有使用 AsyncTask 来执行请求。

我找到了this site,这正是我想做的事情。

希望这对你也有帮助!

【问题讨论】:

  • -1 又一个 NetworkOnMainThreadException ..."What am I doing wrong?" 你没有阅读 Logcat 日志!
  • 阅读here
  • @selvin 为什么-1他问了一些问题如果你能解决请帮助你在stackoverflow上不鼓励新人..如果你有答案而不是回复
  • 添加了日志。很抱歉以任何方式激怒你,我只是一个初学者(菜鸟)。这些日志我什么也做不了……
  • 不,伙计,你没有激怒任何人..别担心,问你的问题,我正在回答

标签: java android post httprequest


【解决方案1】:

您正尝试在主 (UI) 线程上建立网络连接。这在 Android 中是不允许的,因为它会暂停整个 UI,直到您从服务器获得响应。

尝试使用 AsyncTask,或在单独的线程上执行连接。

希望这会有所帮助。

NetworkOnMainThreadException:当应用程序尝试在其主线程上执行网络操作时引发的异常。

您应该在 asynctask 上调用方法,然后只有代码才能工作。为避免它,您应该在另一个线程上调用它。因此 asynctask 更好。

http://android-developers.blogspot.in/2009/05/painless-threading.html

http://android-er.blogspot.in/2012/04/androidosnetworkonmainthreadexception.html

这里是说明如何使用 asynctask 的链接

【讨论】:

  • 感谢您的快速回复!我现在明白了。然后是解决方案......我现在正在尝试使用 AsyncTask。我希望这一切都会很快奏效,这样我就可以“解决”这个问题。到目前为止谢谢!
  • 更新:我找到了这个网站:mobiledevtuts.com/android/android-http-with-asynctask-example 它正是我想要的。所以我现在要试试看!
  • 你先生,你让我很开心!有效!非常感谢!
  • 请提出对别人有好处的答案!!
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 2012-06-19
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
  • 2015-09-06
相关资源
最近更新 更多