2012-08-23 2 views
0

Я программирую небольшое приложение, которое отображает данные с веб-сайта. Данные предоставляются как json-строка. У меня было 3 мероприятия, которые отлично работали. теперь я изменил код одного действия и захотел его протестировать. но с тех пор ни один из этих действий больше не работает, и я не нашел ошибку с отладчиком. может быть, кто-то может помочь мне с логарифмом.приложение вылетает при вызове другого действия (предоставляется лог-код)

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) или использовать версию SDK выше или равную HONEYCOMB. Вы можете обойти это, изменив версию SDK, необходимую для вашего приложения, или отключите ее, используя строгий режим, но это действительно плохая идея, за исключением того, что вы делаете некоторые испытания. – auselen

ответ

0

Вы выполняете сетевую активность в этой деятельности в потоке основного интерфейса. Это вызовет исключение, когда ваша цель сборки будет установлена ​​на соты или выше. Чтобы исправить это, уменьшите цель сборки или переместите операцию сети на ее собственный Thread или AsyncTask.

0

Вы делаете некоторую работу сети в UI потоке, избежать длительных задач, которые не нужно UI, в какой-то другой поток, переходя по ссылке вы можете сделать этого добиться:

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

+0

На самом деле я не могу получить доступ к веб-сайту и получить строку, разобрать ее в JSONObject и заполнить таблицу. его не так много данных. так как я сказал, что он уже работал нормально – Cheetah

+1

Поскольку уровень 11 уровня Apache 3.0 Api, любая операция, требующая доступа к сети, должна быть реализована в какой-то другой поток или асинхронную задачу, а когда вы обращаетесь к веб-сайту и анализируете данные в 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(); 
Смежные вопросы