【问题标题】:Android crashes on performing HttpGet requestAndroid 在执行 HttpGet 请求时崩溃
【发布时间】:2015-01-22 19:15:51
【问题描述】:

我在从 android 中的 Http Url 读取 XML 响应时遇到问题,尽管我在 Java (eclipse) 中尝试了相同的代码,但它在 android 设备上崩溃了。

代码:

    try {
        URL url = new URL(link);
        HttpURLConnection request1 = (HttpURLConnection) url.openConnection();
        request1.setRequestMethod("GET");
        request1.connect();
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

LogCat:

    11-25 01:11:28.853: D/AndroidRuntime(3600): Shutting down VM
11-25 01:11:28.853: W/dalvikvm(3600): threadid=1: thread exiting with uncaught exception (group=0x41832da0)
11-25 01:11:28.863: E/AndroidRuntime(3600): FATAL EXCEPTION: main
11-25 01:11:28.863: E/AndroidRuntime(3600): Process: com.example.qbuster, PID: 3600
11-25 01:11:28.863: E/AndroidRuntime(3600): java.lang.IllegalStateException: Could not execute method of the activity
11-25 01:11:28.863: E/AndroidRuntime(3600):     at android.view.View$1.onClick(View.java:3969)
11-25 01:11:28.863: E/AndroidRuntime(3600):     at android.view.View.performClick(View.java:4637)
11-25 01:11:28.863: E/AndroidRuntime(3600):     at android.view.View$PerformClick.run(View.java:19422)
11-25 01:11:28.863: E/AndroidRuntime(3600):     at android.os.Handler.handleCallback(Handler.java:733)
11-25 01:11:28.863: E/AndroidRuntime(3600):     at android.os.Handler.dispatchMessage(Handler.java:95)
11-25 01:11:28.863: E/AndroidRuntime(3600):     at android.os.Looper.loop(Looper.java:136)
11-25 01:11:28.863: E/AndroidRuntime(3600):     at android.app.ActivityThread.main(ActivityThread.java:5586)
11-25 01:11:28.863: E/AndroidRuntime(3600):     at java.lang.reflect.Method.invokeNative(Native Method)

【问题讨论】:

  • 什么是例外?您是在非 UI 线程上执行此操作吗?
  • java.lang.IllegalStateException: 无法执行活动的方法
  • 能否将 LogCat 添加到问题中?

标签: java android xml http xmlhttprequest


【解决方案1】:

您可能遇到的问题是您正在 UI(主)线程上执行网络操作。一种简单的解决方法是启动一个新线程并在后台执行操作。您可以像这样使用 Asynctask 类:

private class AsyncCaller extends AsyncTask<Void, Void, Void>
{

@Override
protected void onPreExecute() {
    super.onPreExecute();

    //This runs on UI thread still.
}

@Override
protected Void doInBackground(Void... params) {

    //This runs in the background. Make your network operations here


    return null;
}

@Override
protected void onPostExecute(Void result) {
    super.onPostExecute(result);

 //This method will be running on UI thread
 //This is called when onBackground ha finished

}

}

然后您可以实例化一个 AsyncCaller 并在其上调用 execute()。

【讨论】:

  • 你能解释一下吗?我只是不知道如何使用 AsyncTask
【解决方案2】:

您是否检查过 AndroidManifest.xml 上的互联网权限??

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 2017-05-03
    • 1970-01-01
    相关资源
    最近更新 更多