大家都知道,android上传文件是需要模拟表单网页表单。
在此先不说模拟表单的事。
今天终于也是遇到这个问题了。下面先介绍问题由来:
NetworkOnMainThreadException,对于这个拼凑起来的句子一样的单词,大家肯定是可以猜出大概意思,就是 主线程中网络访问异常。
为什么主线程中访问网络会有异常捏?
大概是从android-9之后吧,有一个关于主ui进程中不能访问网络以防造成ui加载阻塞,大概就是这样。
解决方法:
方法一:(亲测成功)
申明,
把以下两块代码写到您的Oncreate(){ }中,也可以只写第一个。
-
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());
Activity..
private Handler handler;
OnCreate(..){
.....
handler=new Handler(); handler.post(runnable); }//end of OnCreate() Runnable runnable=new Runnable() { public void run() { Log.i(TAG, "runnable run"); uploadFile(file); handler.postDelayed(runnable, 5000); } };原本一个简单的上传文件,如果不知道有这么一档子事又会耽误很多功夫,所以做应用也不是一个简单的工作,当各种情况都能独立通过文档解决的时候,才是精通!