【问题标题】:Android my app crash with the httpclient.execute(httpost)Android 我的应用程序因 httpclient.execute(httppost) 而崩溃
【发布时间】:2013-11-05 15:04:27
【问题描述】:

我正在尝试将一些字符串发送到某个 php 文件并取回 JSON 变量。 现在我被困在将我的字符串发送到我的 php 文件中,我尝试了许多教程中的很多组合,所有这些组合都在:

httpclient.execute(httppost);

我真的不知道为什么。 P.S 我在 manifest.xml 文件中授予了 INTERNET 权限。 这是我的代码,它可以在除我之外的任何其他人身上使用。

public void send()
{

    String  msg = "Some message text";


    if(msg.length()>0) {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://localhost:8888/file.php");

        try {
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("id", "01"));
            nameValuePairs.add(new BasicNameValuePair("message", msg));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            httpclient.execute(httppost);// THE APP CRASH HERE!!!
            Toast.makeText(getBaseContext(),"Sent",Toast.LENGTH_SHORT).show();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    } else {
        Toast.makeText(getBaseContext(),"All fields are required", Toast.LENGTH_SHORT).show();
    }
}

目前我只想通过发送过程(接下来我将处理 JSON 问题)。

谢谢大家。

这是 LogCat:

288-299/system_process W/ActivityManager﹕ Force finishing activity com.example.testphppost/.MainActivity

11-05 17:37:56.011      288-299/system_process W/WindowManager﹕ Failure taking screenshot for (328x546) to layer 21010

11-05 17:37:56.294        37-89/? E/SurfaceFlinger﹕ ro.sf.lcd_density must be defined as a build property

11-05 17:37:56.542      288-302/system_process W/ActivityManager﹕ Activity pause timeout for ActivityRecord{40f0e4c8 u0 com.example.testphppost/.MainActivity}

11-05 17:37:56.762       37-184/? E/SurfaceFlinger﹕ ro.sf.lcd_density must be defined as a build property

11-05 17:37:58.141    2147-2147/? I/Process﹕ Sending signal. PID: 2147 SIG: 9

11-05 17:37:58.161      288-288/system_process I/ActivityManager﹕ Process com.example.testphppost (pid 2147) has died.

11-05 17:37:59.061      288-288/system_process W/InputMethodManagerService﹕ Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@40f27770 attribute=null, token = android.os.BinderProxy@40d32668

有什么想法吗?

【问题讨论】:

  • 您不能在 UI 线程上进行网络操作。尝试阅读 logcat。
  • 请添加 logcat 输出 :)
  • httpclient.execute 不能在 ui 线程上运行。 Toast.show 必须。必须去。
  • Nerwork 操作确实在 UI 线程中,但即使在我将它移到自己的类之后,结果也一样...
  • 我从代码中删除了 Toast.show,只是为了看看它是否再次崩溃。

标签: php android post http-post


【解决方案1】:

您可能正在主线程上发出请求。

【讨论】:

    【解决方案2】:

    很难说,因为您没有提供任何有关异常的信息,但正如 Sherif elKhatib 所说,您需要异步发送请求。试试看AsyncTask

    【讨论】:

      【解决方案3】:

      看起来您正在尝试在主线程上执行网络操作,但您不能这样做。 尝试 AsyncTask 或打开新线程。

      【讨论】:

        【解决方案4】:

        android 的环回地址是 10.0.2.2,但你使用的是 localhost(表示 127.0.0.1)尝试更改它。阅读本教程http://www.androidhive.info/2012/01/android-json-parsing-tutorial/

        【讨论】:

        • 试过了,结果一样。还有其他想法吗?请
        • 我在我的 MAC 上运行 MAMP,所以我确定使用“localhost:8888/file.php”应该没问题,不是吗?
        • 如果尝试复制代码if (android.os.Build.VERSION.SDK_INT &gt; 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); },请检查logcat是否为严格模式错误
        猜你喜欢
        • 1970-01-01
        • 2017-10-16
        • 1970-01-01
        • 1970-01-01
        • 2015-02-13
        • 2014-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多