【问题标题】:Insertion in php from android [duplicate]从android插入php [重复]
【发布时间】:2013-10-13 17:29:58
【问题描述】:

我正在使用 php 和 json 请求将数据从 android 插入 mysql。当事件触发时,它会在 logcat 中给出异常。我正在与您分享我的 clogcat,以便您更好地了解正在发生的事情,这是我的 logcat:

10-07 03:55:13.073:E/AndroidRuntime(1665):致命异常:主要 10-07 03:55:13.073: E/AndroidRuntime(1665): android.os.NetworkOnMainThreadException 10-07 03:55:13.073: E/Android 运行时(1665):在 android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1133) 10-07 03:55:13.073:E/AndroidRuntime(1665):在 java.net.InetAddress.lookupHostByName(InetAddress.java:385) 10-07 03:55:13.073: E/AndroidRuntime(1665): 在 java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 10-07 03:55:13.073: E/AndroidRuntime(1665): 在 java.net.InetAddress.getAllByName(InetAddress.java:214) 10-07 03:55:13.073: E/AndroidRuntime(1665): 在 org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 10-07 03:55:13.073:E/AndroidRuntime(1665):在 org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 10-07 03:55:13.073:E/AndroidRuntime(1665):在 org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 10-07 03:55:13.073:E/AndroidRuntime(1665):在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 10-07 03:55:13.073:E/AndroidRuntime(1665):在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 10-07 03:55:13.073:E/AndroidRuntime(1665):在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 10-07 03:55:13.073:E/AndroidRuntime(1665):在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 10-07 03:55:13.073:E/AndroidRuntime(1665):在 com.example.receiptorganizer.Registration$1.insert(Registration.java:78) 10-07 03:55:13.073:E/AndroidRuntime(1665):在 com.example.receiptorganizer.Registration$1.onClick(Registration.java:58) 10-07 03:55:13.073:E/AndroidRuntime(1665):在 android.view.View.performClick(View.java:4240) 10-07 03:55:13.073: E/Android 运行时(1665):在 android.view.View$PerformClick.run(View.java:17721) 10-07 03:55:13.073: E/AndroidRuntime(1665): 在 android.os.Handler.handleCallback(Handler.java:730) 10-07 03:55:13.073: E/AndroidRuntime(1665): 在 android.os.Handler.dispatchMessage(Handler.java:92) 10-07 03:55:13.073: E/AndroidRuntime(1665): 在 android.os.Looper.loop(Looper.java:137) 10-07 03:55:13.073: E/Android 运行时(1665):在 android.app.ActivityThread.main(ActivityThread.java:5103) 10-07 03:55:13.073: E/AndroidRuntime(1665): 在 java.lang.reflect.Method.invokeNative(Native Method) 10-07 03:55:13.073: E/AndroidRuntime(1665): 在 java.lang.reflect.Method.invoke(Method.java:525) 10-07 03:55:13.073: E/Android 运行时(1665):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 10-07 03:55:13.073:E/AndroidRuntime(1665):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 10-07 03:55:13.073: E/AndroidRuntime(1665): 在 dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 我认为在请其他人解决您的问题之前,您应该为此付出更多努力。只需将android.os.NetworkOnMainThreadException 粘贴到 Google 中即可为您提供答案。要了解否决票,请参阅help 页面。 :)

标签: java php android mysql xml


【解决方案1】:

当您在主线程(即应用​​程序的 UI 线程)中处理网络调用(进行网络服务调用)时会出现此错误。

使用 AsyncTask 或 Handler 来管理您的网络服务调用。

看到这个answer

你的异步任务类可以是这样的

class TheTask extends AsyncTask<Void,Void,Void>
{
          protected void onPreExecute()
          {           super.onPreExecute();
                    //display progressdialog.
          } 

           protected void doInBackground(Void ...params)
          {  
                //http request. do not update ui here

                return null;
          } 

           protected void onPostExecute(Void result)
          {     
                    super.onPostExecute(result);
                    //dismiss progressdialog.
                    //update ui
          } 

}

关于AsyncTask和Handler

你可以像这样使用处理程序:

Handler handler = new Handler();
handler.post(new Runnable() {

    @Override
    public void run() {
    // TODO Auto-generated method stub
     // network call here
        }
    });

使用 AsyncTask 是更好的解决方案。

【讨论】:

  • 谢谢,那么最好的解决方案是什么?
  • 我已经更新了答案,请看
  • @shurti 谢谢你,我现在没有收到任何错误异常,但模拟器说应用程序停止工作,所以是因为网速慢或其他问题?
  • @shurti 你能告诉我为什么我会面对这个吗? 10-07 06:27:30.293: W/System.err(2829): org.apache.http.conn.HttpHostConnectException: 连接到192.168.10.101 被拒绝 10-07 06:27:30.293: W/System.err(2829 ): 在 org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183) 10-07 06:27:30.293: W/System.err(2829): 在 org.apache.http.impl。 conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
  • 如果您使用模拟器为本地服务器运行您的应用程序。将本地 ip 提及为 10.0.2.2 并且必须授予 Internet 权限进入您的应用
【解决方案2】:

请在 google android.os.NetworkOnMainThreadException 中查找此异常或直接关注tutroial

【讨论】:

    【解决方案3】:

    使用 AsyncTask 或 Thread 调用 webservice 从您的应用程序发送数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-26
      • 1970-01-01
      • 2013-11-16
      • 2016-08-17
      • 1970-01-01
      • 2017-12-02
      • 2014-04-26
      • 2023-03-28
      相关资源
      最近更新 更多