标签: android-networking

如何修复android.os.NetworkOnMainThreadException?

我在为RssReader运行我的Android项目时遇到错误.

码:

URL url = new URL(urlToRssFeed);
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader xmlreader = parser.getXMLReader();
RssHandler theRSSHandler = new RssHandler();
xmlreader.setContentHandler(theRSSHandler);
InputSource is = new InputSource(url.openStream());
xmlreader.parse(is);
return theRSSHandler.getFeed();
Run Code Online (Sandbox Code Playgroud)

它显示以下错误:

android.os.NetworkOnMainThreadException
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

java android android-networking networkonmainthread

2308
推荐指数
40
解决办法
115万
查看次数

Android网络库的比较:OkHTTP,Retrofit和Volley

来自iOS开发人员学习Android的两部分问题,研究Android项目,该项目将发出从JSON到图像到音频和视频的流媒体下载的各种请求:

  1. 在iOS上,我广泛使用了AFNetworking项目.是否有适用于Android的等效库?

  2. 我已经阅读了OkHTTP和Square的改造,以及Volley,但还没有与他们一起开发的经验.我希望有人可以提供一些最佳使用案例的具体例子.从我所看到的,看起来OkHTTP是三者中最强大的,并且可以处理这个项目的要求(如上所述).

networking android android-networking retrofit

563
推荐指数
7
解决办法
23万
查看次数

在Android应用程序中检查互联网连接的广播接收器

我正在开发一个用于检查互联网连接的Android广播接收器.

问题是我的广播接收器被调用了两次.我希望它只在网络可用时才被调用.如果它不可用,我不希望得到通知.

这是广播接收器

public class NetworkChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(final Context context, final Intent intent) {
        final ConnectivityManager connMgr = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);

        final android.net.NetworkInfo wifi = connMgr
                .getNetworkInfo(ConnectivityManager.TYPE_WIFI);

        final android.net.NetworkInfo mobile = connMgr
                .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

        if (wifi.isAvailable() || mobile.isAvailable()) {
            // Do something

            Log.d("Network Available ", "Flag No 1");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是manifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.broadcastreceiverforinternetconnection"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <receiver android:name=".NetworkChangeReceiver" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" …
Run Code Online (Sandbox Code Playgroud)

java android broadcastreceiver android-networking android-wifi

228
推荐指数
12
解决办法
25万
查看次数

Android检查互联网连接

我想创建一个使用互联网的应用程序,我正在尝试创建一个检查连接是否可用的功能,如果不可用,请转到具有重试按钮和解释的活动.

附件是我的代码到目前为止,但我收到了错误 Syntax error, insert "}" to complete MethodBody.

现在我一直把这些放在试图让它工作,但到目前为止没有运气...任何帮助将不胜感激.

public class TheEvoStikLeagueActivity extends Activity {
    private final int SPLASH_DISPLAY_LENGHT = 3000;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);

        private boolean checkInternetConnection() {
            ConnectivityManager conMgr = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE);
            // ARE WE CONNECTED TO THE NET
            if (conMgr.getActiveNetworkInfo() != null
                    && conMgr.getActiveNetworkInfo().isAvailable()
                    && conMgr.getActiveNetworkInfo().isConnected()) {

                return true;

                /* New Handler to start the Menu-Activity
                 * and close this Splash-Screen after …
Run Code Online (Sandbox Code Playgroud)

networking android android-networking

204
推荐指数
11
解决办法
31万
查看次数

排球Android网络库

关于在我的项目中使用Volley,我几乎没有问题:

  1. 这个库可以用在任何Java项目中,还是只用于Android?
  2. 在这里看到多个分支,没有关于哪个分支开始的文档.我应该从哪个分支开始?
  3. 如何将此库集成到您自己的项目中?什么方法更好:将Volley作为一个独立的库项目并旋转一个jar并将其放入项目中或复制项目中的所有源代码?

android http android-networking android-volley

120
推荐指数
9
解决办法
9万
查看次数

使用Retrofit 2.0和RxJava获取响应状态代码

我正在尝试升级到Retrofit 2.0并在我的android项目中添加RxJava.我正在进行api调用,并希望在服务器发出错误响应的情况下检索错误代码.

Observable<MyResponseObject> apiCall(@Body body);
Run Code Online (Sandbox Code Playgroud)

并在RxJava调用中:

myRetrofitObject.apiCall(body).subscribe(new Subscriber<MyResponseObject>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(MyResponseObject myResponseObject) {
           //On response from server
        }
    });
Run Code Online (Sandbox Code Playgroud)

在Retrofit 1.9中,RetrofitError仍然存在,我们可以通过以下方式获得状态:

error.getResponse().getStatus()
Run Code Online (Sandbox Code Playgroud)

如何使用RxJava进行Retrofit 2.0?

android android-networking rx-java retrofit rx-android

101
推荐指数
3
解决办法
5万
查看次数

使用okHttp信任所有证书

出于测试目的,我正在尝试将套接字工厂添加到我的okHttp客户端,该客户端在设置代理时信任所有内容.这已经完成了很多次,但是我对一个信任套接字工厂的实现似乎缺少了一些东西:

class TrustEveryoneManager implements X509TrustManager {
    @Override
    public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { }

    @Override
    public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { }

    @Override
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
        return null;
    }
}
OkHttpClient client = new OkHttpClient();

final InetAddress ipAddress = InetAddress.getByName("XX.XXX.XXX.XXX"); // some IP
client.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(ipAddress, 8888)));

SSLContext sslContext = SSLContext.getInstance("TLS");
TrustManager[] trustManagers = new TrustManager[]{new TrustEveryoneManager()};
sslContext.init(null, trustManagers, null);
client.setSslSocketFactory(sslContext.getSocketFactory);
Run Code Online (Sandbox Code Playgroud)

没有请求从我的应用程序发出,并且没有异常被记录,因此它似乎在okHttp中无声地失败.经过进一步调查,似乎Connection.upgradeToTls()在强制握手时,okHttp中有一个异常被吞没.我得到的例外是:javax.net.ssl.SSLException: SSL handshake terminated: ssl=0x74b522b0: SSL_ERROR_ZERO_RETURN occurred. You …

ssl android android-networking okhttp

95
推荐指数
6
解决办法
8万
查看次数

如何确定网络类型是2G,3G还是4G

我的应用程序上有一个显示网络类型(2G或3G或4G)的指示器,但在获取网络类型后,我如何知道应该在哪个速度类别?

我知道如何检测网络类型:

private TelephonyManager telephonyManager;
telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
CurrentNetworkType = telephonyManager.getNetworkType();
Run Code Online (Sandbox Code Playgroud)

鉴于可能的返回值:

//   public static final int NETWORK_TYPE_1xRTT
//   Since: API Level 4
//   Current network is 1xRTT
//   Constant Value: 7 (0x00000007)
//   
//   public static final int NETWORK_TYPE_CDMA
//   Since: API Level 4
//   Current network is CDMA: Either IS95A or IS95B
//   Constant Value: 4 (0x00000004)
//   
//   public static final int NETWORK_TYPE_EDGE
//   Since: API Level 1
//   Current network is EDGE
//   Constant Value: …
Run Code Online (Sandbox Code Playgroud)

android android-networking 3g 4g

65
推荐指数
5
解决办法
8万
查看次数

网络监听器Android

我想查看Android手机网络何时关闭.我可以捕获那个事件吗?

我没有得到适当的API或任何可以解释相同的例子.如果有人做过或任何示例链接将真的有用.

java networking android android-networking

61
推荐指数
4
解决办法
6万
查看次数

Volley和AsyncTask

我读了一篇关于Volley的帖子,我知道这是一个很棒的网络库.但我无法理解一件事.

所有请求都是异步任务?

当我想使用Volley发送asyncTask请求时,我是否需要在AsyncTask中输入Volley请求?或者如果它已经是AsyncTask请求,我应该调用Volley Request吗?

 private class MyClass extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {
           // do Volley request
        }
}
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?

android android-networking android-volley

45
推荐指数
2
解决办法
4万
查看次数