This question already has answers here:
How to fix 'android.os.NetworkOnMainThreadException'?
(58个答案)
6年前关闭。
有人告诉我要问这个新问题。
我不知道该怎么做,而我只是想很快地将某些东西弄混。
但是,这就是我所拥有的:
这是我的函数调用:
无论如何,我到底在做什么错?我以前从未用过。而且我需要获得此字符串以在大约12个小时内得到概念证明,在获得字符串之后,我还有很多工作要做。那么提示?正确答案的手势?
也许只是对我做错了什么,如何正确做以及为什么那样做的快速而肮脏的解释?
LogCat:
(58个答案)
6年前关闭。
有人告诉我要问这个新问题。
我不知道该怎么做,而我只是想很快地将某些东西弄混。
但是,这就是我所拥有的:
public void newScanThing(String scanFormat, String scanContent){
URL u;
try {
u = new URL("http://www.searchupc.com/handlers/upcsearch.ashx?request_type=3&access_token=A98AC4EC-830D-4F6B-89D6-D6954361A8CA&upc=" + scanContent.toString());
BufferedReader br = new BufferedReader(new InputStreamReader(u.openStream()));
String stringBuff;
String scanData = "";
while ((stringBuff = br.readLine()) != null){
scanData += stringBuff;
}
br.close();
formatTxt.setText("FORMAT: " + scanFormat + " DATA: I don't crash.");
} catch (MalformedURLException mue) {
// crash
} catch (IOException ioe) {
// crash
}I know which line causes it to crash, and it is the scanData = new ... line. But I have no idea why. If you were to visit the link I visit, you would see the only thing in that URL is a single string. It's not even any HTML or anything, it's just a string.
这是我的函数调用:
newScanThing("UPC_A","816983011311");
无论如何,我到底在做什么错?我以前从未用过。而且我需要获得此字符串以在大约12个小时内得到概念证明,在获得字符串之后,我还有很多工作要做。那么提示?正确答案的手势?
也许只是对我做错了什么,如何正确做以及为什么那样做的快速而肮脏的解释?
LogCat:
01-25 05:53:42.367: D/libEGL(13564): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so
01-25 05:53:42.382: D/libEGL(13564): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so
01-25 05:53:42.390: D/libEGL(13564): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
01-25 05:53:42.492: D/OpenGLRenderer(13564): Enabling debug mode 0
01-25 05:53:42.500: E/SensorManager(13564): thread start
01-25 05:53:42.507: D/SensorManager(13564): registerListener :: handle = 1 name= BMA254 Acceleration Sensor delay= 200000 Listener= android.view.OrientationEventListener$SensorEventListenerImpl@41816ab8
01-25 05:53:42.593: W/IInputConnectionWrapper(13564): showStatusIcon on inactive InputConnection
01-25 05:53:54.406: D/AndroidRuntime(13564): Shutting down VM
01-25 05:53:54.406: W/dalvikvm(13564): threadid=1: thread exiting with uncaught exception (group=0x4106a2a0)
01-25 05:53:54.421: E/AndroidRuntime(13564): FATAL EXCEPTION: main
01-25 05:53:54.421: E/AndroidRuntime(13564): android.os.NetworkOnMainThreadException
01-25 05:53:54.421: E/AndroidRuntime(13564): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
01-25 05:53:54.421: E/AndroidRuntime(13564): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
01-25 05:53:54.421: E/AndroidRuntime(13564): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
01-25 05:53:54.421: E/AndroidRuntime(13564): at java.net.InetAddress.getAllByName(InetAddress.java:214)
01-25 05:53:54.421: E/AndroidRuntime(13564): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
01-25 05:53:54.421: E/AndroidRuntime(13564): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
01-25 05:53:54.421: E/AndroidRuntime(13564): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
01-25 05:53:54.421: E/AndroidRuntime(13564): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
01-25 05:53:54.421: E/AndroidRuntime(13564): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
01-25 05:53:54.421: E/AndroidRuntime(13564): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315)
01-25 05:53:54.421: E/AndroidRuntime(13564): at libcore.net.http.HttpEngine.connect(HttpEngine.java:310)
01-25 05:53:54.421: E/AndroidRuntime(13564): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289)
01-25 05:53:54.421: E/AndroidRuntime(13564): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239)
01-25 05:53:54.421: E/AndroidRuntime(13564): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
01-25 05:53:54.421: E/AndroidRuntime(13564): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
01-25 05:53:54.421: E/AndroidRuntime(13564): at java.net.URL.openStream(URL.java:462)
01-25 05:53:54.421: E/AndroidRuntime(13564): at com.example.food2forkbarcode.MainActivity.newScanThing(MainActivity.java:60)
01-25 05:53:54.421: E/AndroidRuntime(13564): at com.example.food2forkbarcode.MainActivity.onClick(MainActivity.java:28)
01-25 05:53:54.421: E/AndroidRuntime(13564): at android.view.View.performClick(View.java:4222)
01-25 05:53:54.421: E/AndroidRuntime(13564): at android.view.View$PerformClick.run(View.java:17273)
01-25 05:53:54.421: E/AndroidRuntime(13564): at android.os.Handler.handleCallback(Handler.java:615)
01-25 05:53:54.421: E/AndroidRuntime(13564): at android.os.Handler.dispatchMessage(Handler.java:92)
01-25 05:53:54.421: E/AndroidRuntime(13564): at android.os.Looper.loop(Looper.java:137)
01-25 05:53:54.421: E/AndroidRuntime(13564): at android.app.ActivityThread.main(ActivityThread.java:4895)
01-25 05:53:54.421: E/AndroidRuntime(13564): at java.lang.reflect.Method.invokeNative(Native Method)
01-25 05:53:54.421: E/AndroidRuntime(13564): at java.lang.reflect.Method.invoke(Method.java:511)
01-25 05:53:54.421: E/AndroidRuntime(13564): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
01-25 05:53:54.421: E/AndroidRuntime(13564): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
01-25 05:53:54.421: E/AndroidRuntime(13564): at dalvik.system.NativeStart.main(Native Method)
01-25 05:54:02.820: I/Process(13564): Sending signal. PID: 13564 SIG: 9
01-25 05:54:10.656: D/libEGL(13768): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so
01-25 05:54:10.664: D/libEGL(13768): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so
01-25 05:54:10.671: D/libEGL(13768): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
01-25 05:54:10.781: D/OpenGLRenderer(13768): Enabling debug mode 0
01-25 05:54:10.789: E/SensorManager(13768): thread start
01-25 05:54:10.789: D/SensorManager(13768): registerListener :: handle = 1 name= BMA254 Acceleration Sensor delay= 200000 Listener= android.view.OrientationEventListener$SensorEventListenerImpl@41813160
01-25 05:54:12.187: D/AndroidRuntime(13768): Shutting down VM
01-25 05:54:12.187: W/dalvikvm(13768): threadid=1: thread exiting with uncaught exception (group=0x4106a2a0)
01-25 05:54:12.203: E/AndroidRuntime(13768): FATAL EXCEPTION: main
01-25 05:54:12.203: E/AndroidRuntime(13768): android.os.NetworkOnMainThreadException
01-25 05:54:12.203: E/AndroidRuntime(13768): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
01-25 05:54:12.203: E/AndroidRuntime(13768): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
01-25 05:54:12.203: E/AndroidRuntime(13768): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
01-25 05:54:12.203: E/AndroidRuntime(13768): at java.net.InetAddress.getAllByName(InetAddress.java:214)
01-25 05:54:12.203: E/AndroidRuntime(13768): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
01-25 05:54:12.203: E/AndroidRuntime(13768): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
01-25 05:54:12.203: E/AndroidRuntime(13768): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
01-25 05:54:12.203: E/AndroidRuntime(13768): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
01-25 05:54:12.203: E/AndroidRuntime(13768): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
01-25 05:54:12.203: E/AndroidRuntime(13768): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315)
01-25 05:54:12.203: E/AndroidRuntime(13768): at libcore.net.http.HttpEngine.connect(HttpEngine.java:310)
01-25 05:54:12.203: E/AndroidRuntime(13768): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289)
01-25 05:54:12.203: E/AndroidRuntime(13768): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239)
01-25 05:54:12.203: E/AndroidRuntime(13768): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
01-25 05:54:12.203: E/AndroidRuntime(13768): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
01-25 05:54:12.203: E/AndroidRuntime(13768): at java.net.URL.openStream(URL.java:462)
01-25 05:54:12.203: E/AndroidRuntime(13768): at com.example.food2forkbarcode.MainActivity.newScanThing(MainActivity.java:60)
01-25 05:54:12.203: E/AndroidRuntime(13768): at com.example.food2forkbarcode.MainActivity.onClick(MainActivity.java:28)
01-25 05:54:12.203: E/AndroidRuntime(13768): at android.view.View.performClick(View.java:4222)
01-25 05:54:12.203: E/AndroidRuntime(13768): at android.view.View$PerformClick.run(View.java:17273)
01-25 05:54:12.203: E/AndroidRuntime(13768): at android.os.Handler.handleCallback(Handler.java:615)
01-25 05:54:12.203: E/AndroidRuntime(13768): at android.os.Handler.dispatchMessage(Handler.java:92)
01-25 05:54:12.203: E/AndroidRuntime(13768): at android.os.Looper.loop(Looper.java:137)
01-25 05:54:12.203: E/AndroidRuntime(13768): at android.app.ActivityThread.main(ActivityThread.java:4895)
01-25 05:54:12.203: E/AndroidRuntime(13768): at java.lang.reflect.Method.invokeNative(Native Method)
01-25 05:54:12.203: E/AndroidRuntime(13768): at java.lang.reflect.Method.invoke(Method.java:511)
01-25 05:54:12.203: E/AndroidRuntime(13768): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
01-25 05:54:12.203: E/AndroidRuntime(13768): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
01-25 05:54:12.203: E/AndroidRuntime(13768): at dalvik.system.NativeStart.main(Native Method)
01-25 05:55:03.835: D/dalvikvm(13768): GC_CONCURRENT freed 245K, 9% free 7464K/8199K, paused 6ms+3ms, total 44ms
01-25 05:57:28.851: D/dalvikvm(13768): GC_CONCURRENT freed 332K, 11% free 7572K/8455K, paused 16ms+2ms, total 63ms
最佳答案
您收到的错误(NetworkOnMainThreadException
)表示您正在尝试在未经授权的主线程上进行网络操作。
一种解决方案是在AsyncTask
中执行所有与网络相关的操作。您在Henry提供的链接上有一个很好的例子:How to fix android.os.NetworkOnMainThreadException?
基本上,您将创建一个继承AsyncTask
的类,在该类的doInBackground
方法中,您将进行网络操作,而在同一类的onPostExecute
中,您将进行后处理。您将通过创建一个新实例并调用.execute()
来调用此类。
关于java - Java URL droid崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21351488/
10-10 04:56