【问题标题】:Android Studio 2.1.2 http GET errorAndroid Studio 2.1.2 http GET 错误
【发布时间】:2016-12-20 12:17:18
【问题描述】:

我已经为此奋斗了 2 天,对我来说已经结束了。看来我在获取 makeHttpRequest 时遇到了麻烦。我可以添加数据,查看表中的所有记录,但我似乎无法将单个记录数据获取到我的页面,应用程序完全崩溃“不幸的是,'app_name”已停止。

下面是我的 JSonParser 文件和 Activity 文件。任何建议都将受到欢迎。我已经阅读了大量类似的问题,但似乎没有一个有效......

谢谢大家。

根据图像 'JSonParser 的 JsonParser 中的错误,根据图像 'Activity'JSonParser 在我的 Activity 文件中没有错误

日志错误如下---

致命异常:主要 进程:...MyApp.co.za.androidtophp,PID:32447 android.os.NetworkOnMainThreadException 在 android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273) 在 java.net.InetAddress.lookupHostByName(InetAddress.java:431) 在 java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) 在 java.net.InetAddress.getAllByName(InetAddress.java:215) 在 org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:185) 在 org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:172) 在 org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:130) 在 org.apache.http.impl.client.DefaultRequestDirector.executeOriginal(DefaultRequestDirector.java:1337) 在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:705) 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:578) 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:494) 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:472) 在 ...MyApp.co.za.androidtophp.JSONParser.makeHttpRequest(JSONParser.java:63) 在 ...MyApp.co.za.androidtophp.EditProductActivity$GetProductDetails$1.run(EditProductActivity.java:134) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:158) 在 android.app.ActivityThread.main(ActivityThread.java:7224) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

就 apache 而言,Gradle 文件都在那里 -

  1. useLibrary 'org.apache.http.legacy'
  2. 编译文件树(目录:'libs',包括:['*.jar']) 测试编译'junit:junit:4.12' 编译'com.android.support:appcompat-v7:24.1.1' 编译'com.android.support:appcompat-v7:24.1.1' 编译'com.android.support:design:24.1.1' 编译'com.android.volley:volley:1.0.0' 编译'com.google.code.gson:gson:2.6.2' 编译组:'org.apache.httpcomponents',名称:'httpclient-android',版本:'4.3.5.1'

【问题讨论】:

  • 请在文本块中发布代码。删除图像。

标签: android http get


【解决方案1】:

这是因为您试图使 HTTP 请求同步。请创建一个 AsyncTask 或禁用严格模式(只有在应用程序可能会挂起几秒钟没有问题时才聪明)。

警告:请勿将其用于公共应用发布!!!

要禁用严格模式,请在 onCreate() 中添加以下代码(紧跟在 super.onCreate(savedInstanceState) 之后)

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

【讨论】:

  • NetworkOnMainThreadException。请不要宣传使用 StrictMode。不好的做法。
  • 有一个注释最好使用 AsyncTask @greenapps 和一个免责声明,禁用 StrictMode 会导致问题(应用程序可能会挂起几秒钟)..
  • 达里奥,我欠你很多时间,很有魅力,谢谢。然而,这是安全的做法吗?解决方法是什么 - 使用 AsyncTask?
  • 谢谢,但请不要开始将它用于公共应用程序发布!这只是一种解决方法,如果它给您带来错误,请创建一个AsyncTask
  • 请参阅文档了解如何创建 AsyncTask。 developer.android.com/reference/android/os/AsyncTask.html
【解决方案2】:

永远不要在主线程上执行更长的运行任务,特别是在网络调用期间,由于信号强度、服务器崩溃/忙碌等各种因素,您不知道何时会出现响应。

如果它们相对较小,例如下载 1-3 MB 左右的图像、文档/文件等,或者对于较长的任务使用 HTTPUrlConncetion calls,则将所有网络调用放在 Asynchtasks 中,或者您可以使用一些网络库来更好地使用内存和优化,高效的缓存机制。

Volley

  • 易于使用

  • 成熟并有谷歌支持

Retrofit

  • 具有内置集成/支持与有用的库,如

    • GSON - 用于解析JSONObject/JSONArrays
    • Okio 支持 java.io 和 java.nio,以便使用 ByteStringBuffer 更轻松地访问、存储和处理您的数据

      李>
    • RxJava - 可观察的模式

尽管像 GSON 等上述库也可以与 Volley 一起用作单独的依赖项。

还有很多其他的开源库,比如 IonOKHttp 等,虽然上面的比较流行,但是如果你想要自己的自定义,那么你可以简单地使用 HTTPUrlConncetion

试试这个link,了解使用线程的网络调用示例,有关网络库的更多信息,试试comparison between OkHTTP, Retrofit, Volley

还有一些更好的图片下载网络调用选项,即您可以使用Picasso、Glide、Fresco、Universal Image loader等尝试this link for image downloading libraries

【讨论】:

  • 同意,我阅读的越多,就越清楚地允许信号、服务器等。对于 Android 来说有点新手,因为我的经验在于桌面/网络。感谢您的提醒。
  • Andre Oosthuizen 先生,我很高兴。
猜你喜欢
  • 2013-07-12
  • 2016-11-24
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 2022-06-13
相关资源
最近更新 更多