android.os.NetworkOnMainThreadException如何解决?

error以下:java

05-06 11:38:43.104: D/(23666): android.os.NetworkOnMainThreadExceptionandroid

05-06 11:39:07.800: D/GestureDetector(23666): [Surface Touch Event] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 5 mFalseSizeCnt:0api

05-06 11:39:07.800: I/QCNEA(23666): |NIMS| getaddrinfo: hostname www.baidu.com servname NULL numeric 4 appname app

05-06 11:39:07.800: W/System.err(23666): android.os.NetworkOnMainThreadExceptionide

05-06 11:39:07.810: W/System.err(23666): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1128)oop

05-06 11:39:07.810: W/System.err(23666): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)ui

05-06 11:39:07.810: W/System.err(23666): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)this

05-06 11:39:07.810: W/System.err(23666): at java.net.InetAddress.getAllByName(InetAddress.java:214)url

05-06 11:39:07.810: W/System.err(23666): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)spa

05-06 11:39:07.810: W/System.err(23666): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)

05-06 11:39:07.810: W/System.err(23666): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)

05-06 11:39:07.810: W/System.err(23666): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)

05-06 11:39:07.810: W/System.err(23666): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)

05-06 11:39:07.820: W/System.err(23666): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)

05-06 11:39:07.820: W/System.err(23666): at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)

05-06 11:39:07.820: W/System.err(23666): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)

05-06 11:39:07.830: W/System.err(23666): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)

05-06 11:39:07.830: W/System.err(23666): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:282)

05-06 11:39:07.830: W/System.err(23666): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177)

05-06 11:39:07.830: W/System.err(23666): at com.example.networkconnectiondemo.MainActivity.onClick(MainActivity.java:76)

05-06 11:39:07.840: W/System.err(23666): at android.view.View.performClick(View.java:4367)

05-06 11:39:07.840: W/System.err(23666): at android.view.View$PerformClick.run(View.java:17984)

05-06 11:39:07.840: W/System.err(23666): at android.os.Handler.handleCallback(Handler.java:725)

05-06 11:39:07.840: W/System.err(23666): at android.os.Handler.dispatchMessage(Handler.java:92)

05-06 11:39:07.840: W/System.err(23666): at android.os.Looper.loop(Looper.java:137)

05-06 11:39:07.840: W/System.err(23666): at android.app.ActivityThread.main(ActivityThread.java:5297)

05-06 11:39:07.840: W/System.err(23666): at java.lang.reflect.Method.invokeNative(Native Method)

05-06 11:39:07.840: W/System.err(23666): at java.lang.reflect.Method.invoke(Method.java:511)

05-06 11:39:07.840: W/System.err(23666): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)

05-06 11:39:07.840: W/System.err(23666): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)

05-06 11:39:07.840: W/System.err(23666): at dalvik.system.NativeStart.main(Native Method)

个人代码以下:

@Override

public void onClick(View v)

{

switch (v.getId())

{

case R.id.activity_main_btn:

try

{

// Toast.makeText(this, "I'm here!", Toast.LENGTH_LONG).show();

/* 获取url并获取数据 */

// 清空显示内容的文本框

tvShowContent.setText("");

// 获取用户输入的url

URL url = new URL(etInputUrl.getText().toString());

//URL url = new URL("http://www.baidu.com");

// 声明打开连接

URLConnection urlConnection = url.openConnection();

// 获取网页数据

BufferedReader bufferedReader = new BufferedReader(

new InputStreamReader(urlConnection.getInputStream()));

// 逐行读取时的字符串

String line = "";

// 读取数据

while ((line = bufferedReader.readLine()) != null)

{

Message message = new Message();

message.obj = line;

message.what = 0;

// 将数据显示在界面上

handler.sendMessage(message);

}


} catch (Exception e)

{

e.printStackTrace();

Log.d("", e.toString());

}

break;

。。。。。。。。。

经过debug能够发如今执行

// 获取网页数据

BufferedReader bufferedReader = new BufferedReader(

new InputStreamReader(urlConnection.getInputStream()));

这段代码时报的错。

那么如何修改呢?

根据api文档介绍,只要在调用这段代码以前加上以下代码便可:

StrictMode

.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()

.detectDiskReads().detectDiskWrites()

.detectNetwork() // or .detectAll() for all

// detectable problems

.penaltyLog().build());

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()

.detectLeakedSqlLiteObjects()

.detectLeakedClosableObjects().penaltyLog()

.penaltyDeath().build());

相关文章
相关标签/搜索