Android 台灣中文網

標題: 急~救命呀!!Android>4.0,http抓資料出現的錯誤 [打印本頁]

作者: andony5168    時間: 2014-2-23 17:11
標題: 急~救命呀!!Android>4.0,http抓資料出現的錯誤
我有以下這段抓取網頁的程式,在Android 2.33以下的模擬器run是正常的,但在4.x的手機上run就會錯誤,網路上找好久,都說Android 3.0以上必須用執行緒的寫法才不會出錯。但是我寫了好幾個版本還是會錯,想請教應該怎麼寫?

public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
......
String WebURL = "http://rate.bot.com.tw/Pages/Static/UIP003.zh-TW.htm";//要抓的網站
......
String urlData = null;//起始值
urlData = GetURLDate();
Parser(urlData);//解析抓下來資料的子程式
......
}
public String GetURLDate(){
                String urlData = null;
                try{
                        HttpURLConnection hc = null;                               
                        URL url = new URL(WebURL);
                        hc = (HttpURLConnection)url.openConnection();
                        hc.setDoInput(true);
                        hc.setDoOutput(true);                                               
                        hc.connect();
                        BufferedReader in = new BufferedReader(new InputStreamReader(hc.getInputStream()));
                        String decodedString;
                        while ((decodedString = in.readLine()) != null) {
                                urlData += decodedString;
                        }
                        in.close();
                }
                catch(Exception e){
                        Log.e("ERROR", e.toString());
                }
                return urlData;               
        }

錯誤的log如下:
2-22 16:14:30.583: D/dalvikvm(13618): threadid=9: interp stack at 0x4c26e000
02-22 16:14:30.584: D/dalvikvm(13618): threadid=10: interp stack at 0x4c276000
02-22 16:14:30.589: D/jdwp(13618): sendBufferedRequest : len=0x41
02-22 16:14:30.590: D/dalvikvm(13618): threadid=11: interp stack at 0x4ca7e000
02-22 16:14:30.609: D/ActivityThread(13618): BIND_APPLICATION handled : 0 / AppBindData{appInfo=ApplicationInfo{4186bb60 ncu.bnlab.OnlineMoney}}
02-22 16:14:30.636: I/System.out(13618): initHttpEngine: implies a POST method
02-22 16:14:30.638: D/libc-netbsd(13618): getaddrinfo: rate.bot.com.tw  return error = 0x8 >>
02-22 16:14:30.643: D/libc-netbsd(13618): getaddrinfo: rate.bot.com.tw get result from proxy >>
02-22 16:14:30.644: I/System.out(13618): [socket][0] connection rate.bot.com.tw/103.21.63.12:80;LocalPort=49579(0)
02-22 16:14:30.644: I/System.out(13618): [CDS]connect[rate.bot.com.tw/103.21.63.12:80] tm:90
02-22 16:14:30.645: D/Posix(13618): [Posix_connect Debug]Process ncu.bnlab.OnlineMoney :80
02-22 16:14:30.714: I/System.out(13618): [socket][/192.168.0.102:49579]
02-22 16:14:30.714: I/System.out(13618): rx timeout:0
02-22 16:14:30.816: E/ERROR(13618): java.io.FileNotFoundException: http://rate.bot.com.tw/Pages/Static/UIP003.zh-TW.htm
02-22 16:14:30.817: D/AndroidRuntime(13618): Shutting down VM
02-22 16:14:30.818: W/dalvikvm(13618): threadid=1: thread exiting with uncaught exception (group=0x40f50258)
02-22 16:14:30.820: E/AndroidRuntime(13618): FATAL EXCEPTION: main
02-22 16:14:30.820: E/AndroidRuntime(13618): java.lang.RuntimeException: Unable to start activity ComponentInfo{ncu.bnlab.OnlineMoney/ncu.bnlab.OnlineMoney.OnlineMoney}: java.lang.NullPointerException
02-22 16:14:30.820: E/AndroidRuntime(13618):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2077)
02-22 16:14:30.820: E/AndroidRuntime(13618):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104)
02-22 16:14:30.820: E/AndroidRuntime(13618):         at android.app.ActivityThread.access$600(ActivityThread.java:134)
02-22 16:14:30.820: E/AndroidRuntime(13618):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
02-22 16:14:30.820: E/AndroidRuntime(13618):         at android.os.Handler.dispatchMessage(Handler.java:99)
02-22 16:14:30.820: E/AndroidRuntime(13618):         at android.os.Looper.loop(Looper.java:137)
02-22 16:14:30.820: E/AndroidRuntime(13618):         at android.app.ActivityThread.main(ActivityThread.java:4624)
02-22 16:14:30.820: E/AndroidRuntime(13618):         at java.lang.reflect.Method.invokeNative(Native Method)
02-22 16:14:30.820: E/AndroidRuntime(13618):         at java.lang.reflect.Method.invoke(Method.java:511)
02-22 16:14:30.820: E/AndroidRuntime(13618):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
02-22 16:14:30.820: E/AndroidRuntime(13618):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
02-22 16:14:30.820: E/AndroidRuntime(13618):         at dalvik.system.NativeStart.main(Native Method)
02-22 16:14:30.820: E/AndroidRuntime(13618): Caused by: java.lang.NullPointerException
02-22 16:14:30.820: E/AndroidRuntime(13618):         at ncu.bnlab.OnlineMoney.OnlineMoney.Parser(OnlineMoney.java:166)
02-22 16:14:30.820: E/AndroidRuntime(13618):         at ncu.bnlab.OnlineMoney.OnlineMoney.onCreate(OnlineMoney.java:102)
02-22 16:14:30.820: E/AndroidRuntime(13618):         at android.app.Activity.performCreate(Activity.java:4479)
02-22 16:14:30.820: E/AndroidRuntime(13618):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
02-22 16:14:30.820: E/AndroidRuntime(13618):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2041)
02-22 16:14:30.820: E/AndroidRuntime(13618):         ... 11 more

作者: xjxuvup    時間: 2014-2-24 15:54
應該是NetworkOnMainThreadException例外
用thread的方式去跑
這篇看看
http://my.eoe.cn/iceskysl/archive/4382.html
作者: andony5168    時間: 2014-3-4 10:13
xjxuvup 發表於 2014-2-24 15:54
應該是NetworkOnMainThreadException例外
用thread的方式去跑
這篇看看

沒錯耶!我後來就是用這篇的方法解決的,但是要二個方法都用才行。
謝謝您的回覆,愛你喔~




歡迎光臨 Android 台灣中文網 (https://apk.tw/) Powered by Discuz! X3.1