2014-11-24 8 views
0

У меня проблема с чтением ответа XML от Http Url в android, хотя я пробовал использовать тот же код в Java (eclipse), но на устройстве Android он сработал.Андроид сбой при выполнении запроса HttpGet

Код:

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) 
+0

Что такое исключение? Вы делаете это на не-UI-потоке? –

+0

java.lang.IllegalStateException: Не удалось выполнить способ действия – user3626926

+0

Можете ли вы добавить LogCat в вопрос? –

ответ

1

Проблема, с которой вы можете столкнуться, заключается в том, что вы выполняете сетевую операцию в потоке пользовательского интерфейса (основного). Один простой способ решения - начать новый поток и выполнить операцию в фоновом режиме. Вы можете использовать класс 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 и вызвать выполнение() на нем.

+0

не могли бы вы объяснить больше? Я просто не знаю, как использовать AsyncTask – user3626926

0

Вы проверить разрешение интернет на AndroidManifest.xml ??

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

да это добавлено в mainfest – user3626926