2012-08-23 47 views
0

我正在編程一個小應用程序,它顯示來自網站的數據。數據以json字符串形式提供。我有3個活動工作正常。現在我改變了一個活動的代碼並想測試它。但自那時以來沒有任何活動工作了,我沒有找到調試器的錯誤。也許有人可以用logcat幫助我。應用程序崩潰時調用另一個活動(logcat提供)

THX

08-23 08:17:09.600: E/Trace(641): error opening trace file: No such file or directory (2) 
08-23 08:17:10.368: D/dalvikvm(641): GC_FOR_ALLOC freed 93K, 2% free 10954K/11143K, paused 60ms, total 64ms 
08-23 08:17:10.738: D/gralloc_goldfish(641): Emulator without GPU emulation detected. 
08-23 08:17:32.118: D/AndroidRuntime(641): Shutting down VM 
08-23 08:17:32.118: W/dalvikvm(641): threadid=1: thread exiting with uncaughtexception (group=0x40a13300) 
08-23 08:17:32.260: E/AndroidRuntime(641): FATAL EXCEPTION: main 
08-23 08:17:32.260: E/AndroidRuntime(641): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.damps.fantasy/de.damps.fantasy.scoresActivity}: android.os.NetworkOnMainThreadException 
08-23 08:17:32.260: E/AndroidRuntime(641): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 
08-23 08:17:32.260: E/AndroidRuntime(641): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
08-23 08:17:32.260: E/AndroidRuntime(641): at android.app.ActivityThread.access$600(ActivityThread.java:130) 
08-23 08:17:32.260: E/AndroidRuntime(641): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
08-23 08:17:32.260: E/AndroidRuntime(641): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-23 08:17:32.260: E/AndroidRuntime(641): at android.os.Looper.loop(Looper.java:137) 
08-23 08:17:32.260: E/AndroidRuntime(641): at android.app.ActivityThread.main(ActivityThread.java:4745) 
08-23 08:17:32.260: E/AndroidRuntime(641): at java.lang.reflect.Method.invokeNative(Native Method) 
08-23 08:17:32.260: E/AndroidRuntime(641): at java.lang.reflect.Method.invoke(Method.java:511) 
08-23 08:17:32.260: E/AndroidRuntime(641): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
08-23 08:17:32.260: E/AndroidRuntime(641): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
08-23 08:17:32.260: E/AndroidRuntime(641): at dalvik.system.NativeStart.main(Native Method) 
08-23 08:17:32.260: E/AndroidRuntime(641): Caused by: android.os.NetworkOnMainThreadException 
08-23 08:17:32.260: E/AndroidRuntime(641): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 
08-23 08:17:32.260: E/AndroidRuntime(641): at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
08-23 08:17:32.260: E/AndroidRuntime(641): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
08-23 08:17:32.260: E/AndroidRuntime(641): at java.net.InetAddress.getAllByName(InetAddress.java:214) 
08-23 08:17:32.260: E/AndroidRuntime(641): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70) 
08-23 08:17:32.260: E/AndroidRuntime(641): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
08-23 08:17:32.260: E/AndroidRuntime(641): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:341) 
08-23 08:17:32.260: E/AndroidRuntime(641): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 
08-23 08:17:32.260: E/AndroidRuntime(641): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
08-23 08:17:32.260: E/AndroidRuntime(641): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315) 
08-23 08:17:32.260: E/AndroidRuntime(641): at libcore.net.http.HttpEngine.connect(HttpEngine.java:310) 
08-23 08:17:32.260: E/AndroidRuntime(641): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289) 
08-23 08:17:32.260: E/AndroidRuntime(641): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239) 
08-23 08:17:32.260: E/AndroidRuntime(641): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273) 
08-23 08:17:32.260: E/AndroidRuntime(641): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168) 
08-23 08:17:32.260: E/AndroidRuntime(641): at java.net.URL.openStream(URL.java:462) 
08-23 08:17:32.260: E/AndroidRuntime(641): at de.damps.fantasy.Json.readUrl(Json.java:39) 
08-23 08:17:32.260: E/AndroidRuntime(641): at de.damps.fantasy.Json.<init>(Json.java:20) 
08-23 08:17:32.260: E/AndroidRuntime(641): at de.damps.fantasy.scoresActivity.parse(scoresActivity.java:110) 
08-23 08:17:32.260: E/AndroidRuntime(641): at de.damps.fantasy.scoresActivity.onCreate(scoresActivity.java:34) 
08-23 08:17:32.260: E/AndroidRuntime(641): at android.app.Activity.performCreate(Activity.java:5008) 
08-23 08:17:32.260: E/AndroidRuntime(641): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
08-23 08:17:32.260: E/AndroidRuntime(641): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
08-23 08:17:32.260: E/AndroidRuntime(641): ... 11 more 
08-23 08:17:32.399: D/dalvikvm(641): GC_CONCURRENT freed 227K, 3% free 11198K/11463K, paused 77ms+106ms, total 270ms 
+0

發現我犯下的錯誤還是什麼我改變。 我在清單中添加了android:targetSdkVersion。但我會尋找使用asynctask現在thx的幫助 – Cheetah

+0

[NetworkOnMainThreadException](http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html)表示您正在主線程上執行網絡操作。這是一個非常糟糕的主意。您需要啓用[嚴格模式](http://developer.android.com/reference/android/os/StrictMode.html)或使用高於或等於HONEYCOMB的SDK版本來獲取此內容。您可以通過更改應用程序所需的SDK版本或使用嚴格模式禁用它來解決此問題,但除非您正在進行一些試驗,否則這是一個非常糟糕的主意。 – auselen

回答

0

您正在主UI線程的Activity上執行一些網絡活動。只要您的構建目標設置爲蜂窩或更高,這會引發異常。修復它可以減少構建目標,或者將網絡操作移到它自己的ThreadAsyncTask

0

你正在做的UI線程一些網絡操作,避免不需要的用戶界面,在一些其他線程長時間運行的任務,通過下面的鏈接,你可以做實現這一目標:

http://www.vogella.com/articles/AndroidPerformance/article.html

+0

不是我真的訪問網站並獲取字符串,將其解析爲JSONObject並用它填充tableview。無論如何它的數據並不多。因爲我說它已經工作正常 – Cheetah

+1

由於android 3.0 Api級別11,任何需要網絡訪問的操作都必須實現到某個其他線程或異步任務中,並且當您訪問網站並將數據解析爲json時,您正在使用網絡線程,並且很可能是您調用此代碼的代碼塊可能位於某個其他線程或異步任務代碼中。 – jeet

0

當您從網站下載數據時,您必須實施AsynTask。

例子:

使用的AsyncTask:

public class MyAsyncTask extends AsyncTask<Void, Void, Result>{ 
        private Activity activity; 
        private ProgressDialog progressDialog; 

     public MyAsyncTask(Activity activity) { 
         super(); 
      this.activity = activity; 
     } 

     @Override 
     protected void onPreExecute() { 
     super.onPreExecute(); 
      progressDialog = ProgressDialog.show(activity, "Loading", "Loading", true); 
     } 

     @Override 
     protected Result doInBackground(Void... v) { 
     //do your stuff here 
     return null; 

     } 

     @Override 
     protected void onPostExecute(Result result) { 
      progressDialog.dismiss(); 
      Toast.makeText(activity.getApplicationContext(), "Finished.", 
        Toast.LENGTH_LONG).show(); 
     } 

}

從活動稱之爲:

MyAsyncTask task = new AsyncTask(myActivity.this); 
task.execute(); 
相關問題