Java Android Json HttpGet/Post HttpResponse

Java Android Json HttpGet/Post HttpResponse,java,php,mysql,json,httpresponse,Java,Php,Mysql,Json,Httpresponse,我试图从mysql数据库中根据条形码编号获取产品。我检查了我的php代码,他们正在工作,但在android方面,我犯了一个错误。 这里是我的GetProductDetails类(我认为这部分还可以) Logcat错误 12-14 18:05:30.994:E/AndroidRuntime(986):致命异常:主 12-14 18:05:30.994:E/AndroidRuntime(986):android.os.NetworkOnMainThreadException 12-14 18:05:

我试图从mysql数据库中根据条形码编号获取产品。我检查了我的php代码,他们正在工作,但在android方面,我犯了一个错误。 这里是我的GetProductDetails类(我认为这部分还可以)

Logcat错误

12-14 18:05:30.994:E/AndroidRuntime(986):致命异常:主 12-14 18:05:30.994:E/AndroidRuntime(986):android.os.NetworkOnMainThreadException 12-14 18:05:30.994:E/AndroidRuntime(986):在android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 12-14 18:05:30.994:E/AndroidRuntime(986):在libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)上 12-14 18:05:30.994:E/AndroidRuntime(986):在libcore.io.IoBridge.connecterno(IoBridge.java:127) 12-14 18:05:30.994:E/AndroidRuntime(986):在libcore.io.IoBridge.connect(IoBridge.java:112)上 12-14 18:05:30.994:E/AndroidRuntime(986):在java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 12-14 18:05:30.994:E/AndroidRuntime(986):在java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 12-14 18:05:30.994:E/AndroidRuntime(986):位于java.net.Socket.connect(Socket.java:842) 12-14 18:05:30.994:E/AndroidRuntime(986):位于org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119) 12-14 18:05:30.994:E/AndroidRuntime(986):位于org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144) 12-14 18:05:30.994:E/AndroidRuntime(986):位于org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 12-14 18:05:30.994:E/AndroidRuntime(986):位于org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 12-14 18:05:30.994:E/AndroidRuntime(986):位于org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 12-14 18:05:30.994:E/AndroidRuntime(986):位于org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 12-14 18:05:30.994:E/AndroidRuntime(986):位于org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 12-14 18:05:30.994:E/AndroidRuntime(986):位于org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 12-14 18:05:30.994:E/AndroidRuntime(986):位于com.example.ssa.JSONParser.makeHttpRequest(JSONParser.java:66) 12-14 18:05:30.994:E/AndroidRuntime(986):在com.example.ssa.Query\u product$GetProductDetails$1.run(Query\u product.java:134) 12-14 18:05:30.994:E/AndroidRuntime(986):在android.os.Handler.handleCallback(Handler.java:725)上 12-14 18:05:30.994:E/AndroidRuntime(986):在android.os.Handler.dispatchMessage(Handler.java:92)上 12-14 18:05:30.994:E/AndroidRuntime(986):在android.os.Looper.loop(Looper.java:137) 12-14 18:05:30.994:E/AndroidRuntime(986):位于android.app.ActivityThread.main(ActivityThread.java:5041) 12-14 18:05:30.994:E/AndroidRuntime(986):位于java.lang.reflect.Method.Invokenactive(本机方法) 12-14 18:05:30.994:E/AndroidRuntime(986):位于java.lang.reflect.Method.invoke(Method.java:511) 12-14 18:05:30.994:E/AndroidRuntime(986):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 12-14 18:05:30.994:E/AndroidRuntime(986):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 12-14 18:05:30.994:E/AndroidRuntime(986):在dalvik.system.NativeStart.main(本机方法) 12-14 18:10:31.483:I/进程(986):发送信号。PID:986信号:9 12-14 18:10:33.372:D/gralloc_金鱼(1025):未检测到GPU仿真的仿真器


您无法在主线程上执行网络任务,因为如果网络任务需要很长时间,它可能会阻塞您的应用程序。您需要改为使用
AsyncTask
在后台运行此类任务


下面是一个问题。

您无法在主线程上执行网络任务,因为如果网络任务需要很长时间,它可能会阻止您的应用程序。您需要改为使用
AsyncTask
在后台运行此类任务


这是一个错误。

看起来不是json的错误。 您正试图从主线程调用一个android 4.0不允许的url
尝试使用AsynTask或从辅助线程调用url。

看起来错误不是json。 您正试图从主线程调用一个android 4.0不允许的url
尝试使用AsynTask或从辅助线程调用url。

尝试在下面的主活动中使用以下代码
setContentView()
,以避免出现
networkMainThread
异常

if (android.os.Build.VERSION.SDK_INT > 9) {
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                StrictMode.setThreadPolicy(policy);
            }

尝试在下面的主活动中使用下面的代码
setContentView()
,以避免出现
networkOnmainThread
异常

if (android.os.Build.VERSION.SDK_INT > 9) {
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                StrictMode.setThreadPolicy(policy);
            }

谢谢你的回答。我不明白如何在AsyncTask中插入JSONObject方法。我是android新手。@user3102822我需要看看你在哪里调用asyncTask
getProductDetails
,才能进一步帮助你。@user3102822你是否尝试过使用
runOnUiThread()
而不是简单地将该线程中的所有内容放入
doInBackground
?通过在后台的UI线程上运行某些东西,您似乎违背了
AsyncTask
的目的。但我不完全确定,试试看,让我知道它是否有效,如果你不知道我的意思,我可以写一些代码让你更好地解释。谢谢你的回答。我不明白如何在AsyncTask中插入JSONObject方法。我是android新手。@user3102822我需要看看你在哪里调用asyncTask
getProductDetails
,才能进一步帮助你。@user3102822你是否尝试过使用
runOnUiThread()
而不是简单地将该线程中的所有内容放入
doInBackground
?通过在后台的UI线程上运行某些东西,您似乎违背了
AsyncTask
的目的。但我不完全确定,试试看
HttpResponse httpResponse = httpClient.execute(httpGet);
if (android.os.Build.VERSION.SDK_INT > 9) {
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                StrictMode.setThreadPolicy(policy);
            }