2014-10-27 78 views
-2

我有一個Android應用程序都崩潰了,因爲我不明白的錯誤...異常RestAdapter處理器

  String TEST_URL = "http://10.0.2.2:8080"; 
      PersonSvcApi personService = new RestAdapter.Builder() 
        .setEndpoint(TEST_URL).setLogLevel(LogLevel.FULL).build() 
        .create(PersonSvcApi.class); 

      Person person = new Person(); 

      String id = "234"; 
      person.setAge("21"); 
      person.setName("Test"); 
      person.setId(id); 
      boolean ok = personService.addPerson(person); 
      Collection<Person> people = personService.getPersonList(); 

出現在最後兩行的錯誤,好像我做錯了什麼與連接,但我沒有得到它。我有Web服務器工作,我已經嘗試過使用它,它使用一個簡單的Java代碼。當我與Android做,我得到這樣的:

 10-27 10:09:20.031: E/AndroidRuntime(548): FATAL EXCEPTION: main 
     10-27 10:09:20.031: E/AndroidRuntime(548): retrofit.RetrofitError 
     10-27 10:09:20.031: E/AndroidRuntime(548): at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:395) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:240) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at $Proxy0.addPerson(Native Method) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at com.example.cloudapp.MainActivity$2.onClick(MainActivity.java:72) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at android.view.View.performClick(View.java:3480) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at android.view.View$PerformClick.run(View.java:13983) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at android.os.Handler.handleCallback(Handler.java:605) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at android.os.Handler.dispatchMessage(Handler.java:92) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at android.os.Looper.loop(Looper.java:137) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at android.app.ActivityThread.main(ActivityThread.java:4340) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at java.lang.reflect.Method.invokeNative(Native Method) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at java.lang.reflect.Method.invoke(Method.java:511) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at dalvik.system.NativeStart.main(Native Method) 
     10-27 10:09:20.031: E/AndroidRuntime(548): Caused by: java.lang.ExceptionInInitializerError 
     10-27 10:09:20.031: E/AndroidRuntime(548): at com.google.gson.FieldBindingStrategy$1.matches(FieldBindingStrategy.java:28) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:125) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:78) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at com.google.gson.Gson.getAdapter(Gson.java:378) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at com.google.gson.Gson.toJson(Gson.java:619) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at com.google.gson.Gson.toJson(Gson.java:605) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at com.google.gson.Gson.toJson(Gson.java:558) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at com.google.gson.Gson.toJson(Gson.java:538) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at retrofit.converter.GsonConverter.toBody(GsonConverter.java:80) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at retrofit.RequestBuilder.setArguments(RequestBuilder.java:353) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:298) 
     10-27 10:09:20.031: E/AndroidRuntime(548): ... 14 more 
     10-27 10:09:20.031: E/AndroidRuntime(548): Caused by: android.os.NetworkOnMainThreadException 
     10-27 10:09:20.031: E/AndroidRuntime(548): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at java.net.InetAddress.lookupHostByName(InetAddress.java:391) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at java.net.InetAddress.getLocalHost(InetAddress.java:371) 
     10-27 10:09:20.031: E/AndroidRuntime(548): at com.google.gson.util.N.<clinit>(N.java:87) 
     10-27 10:09:20.031: E/AndroidRuntime(548): ... 25 more 
+1

[NetworkOnMainThreadException]的可能重複(http://stackoverflow.com/questions/5150637/networkonmainthreadexception) – njzk2 2014-10-27 14:53:45

回答

0

當您看到「產生的原因:android.os.NetworkOnMainThreadException」,這意味着你正試圖使主(UI)線程的網絡電話。網絡調用可能需要很長或很長時間才能執行,因此您不希望讓用戶等待(凍結UI /讓應用程序不響應)。

我猜測你使用Retrofit進行的網絡調用是在onCreate中,或者是由某個事件監聽器觸發的。您將希望在一個單獨的線程(Thread,AsyncTask)上進行此調用。