2016-02-19 106 views
1

好了,试图访问使用Android PostgreSQL数据库中,我得到了下面,非常令人吃惊的例外:NetworkOnMainThreadException同时访问一个PostgreSQL数据库

 
    org.postgresql.util.PSQLException: Something unusual has occurred to cause the driver to fail. Please report this exception. 
     at org.postgresql.Driver.connect(Driver.java:305) 
     at java.sql.DriverManager.getConnection(DriverManager.java:179) 
     at java.sql.DriverManager.getConnection(DriverManager.java:213) 
     at org.pbdevelopement.cineapp.NetReader.getConnection(NetReader.java:42) 
     at org.pbdevelopement.cineapp.MainActivity.getPersonalMovies(MainActivity.java:242) 
     at org.pbdevelopement.cineapp.MainActivity.onCreate(MainActivity.java:115) 
     at android.app.Activity.performCreate(Activity.java:6034) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2332) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2442) 
     at android.app.ActivityThread.access$800(ActivityThread.java:156) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1351) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:211) 
     at android.app.ActivityThread.main(ActivityThread.java:5373) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815) 
    Caused by: android.os.NetworkOnMainThreadException 
     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1151) 
     at java.net.InetAddress.lookupHostByName(InetAddress.java:418) 
     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) 
     at java.net.InetAddress.getByName(InetAddress.java:305) 
     at java.net.InetSocketAddress.(InetSocketAddress.java:105) 
     at java.net.InetSocketAddress.(InetSocketAddress.java:90) 
     at org.postgresql.core.PGStream.(PGStream.java:61) 
     at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:129) 
     at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:65) 
     at org.postgresql.jdbc.PgConnection.(PgConnection.java:159) 
     at org.postgresql.Driver.makeConnection(Driver.java:415) 
     at org.postgresql.Driver.connect(Driver.java:283) 
     ... 18 more 

我不知道如何解决这个问题,我也不有线索在哪里向...汇报有人有任何想法吗?

+1

您可以在这里报告PostgreSQL的JDBC错误:https://jdbc.postgresql.org/community/mailinglist.html – bradimus

+0

为什么这个问题是向下投? – user2004685

+0

@bradimus你觉得呢,这个值得报道吗?还是我只是愚蠢地正确使用他们的驱动程序,并不值得更好? ;) – Maverick283

回答

4

看来您正尝试通过对应用程序主线程执行网络操作来执行您的数据库请求。这会抛出异常android.os.NetworkOnMainThreadException,因为Android中的每个网络操作都必须在自己的线程中启动。尝试在AsyncTask中执行您的数据库请求。

AsyncTask

+0

同意。检查堆栈跟踪中列出的代码:'at org.pbdevelopement.cineapp.NetReader.getConnection(NetReader.java:42) at org.pbdevelopement.cineapp.MainActivity.getPersonalMovies(MainActivity.java:242) at org。 pbdevelopement.cineapp.MainActivity.onCreate(MainActivity.java:115)'并在你的主线程之外的地方实现。 – Pedantic

+0

嗯,听起来很合理...它应该不会抛出一个不同的例外,但? – Maverick283