相关疑难解决方法(0)

NetworkOnMainThreadException

我刚刚在官方文档中发现了NetworkOnMainThreadException

并想知道模拟器是否抛出这个.我一直在测试我的应用程序,据我所知,所有网络都是主线程(使用Roboguice RoboAsyncTask),但你永远不知道是否有人没有逃脱.

我也在使用StrictMode并且没有看到任何东西.

  1. 我的代码是干净的还是不会在模拟器上抛出?

  2. 我们应该如何为生产中的这种情况做好准备?

  3. 宽限期或其他什么?或者现在已经过去了;-) ??

networking android asynchronous android-asynctask networkonmainthread

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

RxJava和Retrofit2:NetworkOnMainThreadException

我意识到我在MainThread上使用了subscribeOn()/ observeOn().我可以传递给subscribeOn()的选项有哪些?我可以传递给observeOn()的选项有哪些?

12-17 21:36:09.154 20550-20550/rx.test D/MainActivity2: [onCreate]
12-17 21:36:09.231 20550-20550/rx.test D/MainActivity2: starting up observable...
12-17 21:36:09.256 20550-20550/rx.test D/MainActivity2: [onError] 
12-17 21:36:09.256 20550-20550/rx.test W/System.err: android.os.NetworkOnMainThreadException
Run Code Online (Sandbox Code Playgroud)

GovService.java

import java.util.List;
import retrofit.Call;
import retrofit.http.GET;
import rx.Observable;

public interface GovService {
    @GET("/txt2lrn/sat/index_1.json")
    Observable<MyTest> getOneTestRx();
}
Run Code Online (Sandbox Code Playgroud)

MyTest.java

public class MyTest {
    private String name, url;
    private int num;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) …
Run Code Online (Sandbox Code Playgroud)

android rx-java retrofit

17
推荐指数
2
解决办法
1万
查看次数

android.os.NetworkOnMainThreadException在android上使用rxjava

我无法实现rxJava以检查android上是否有互联网连接我这样做:

在我的启动器活动中,我在onCreate中有这个:

AndroidObservable.bindActivity(this,
            Observable.just(Utils.isActiveInternetConnection(Launcher.this)))
            .subscribeOn(Schedulers.newThread())
            .subscribe(new Action1<Boolean>() {
                @Override
                public void call(Boolean aBoolean) {
                    if (aBoolean) {
                        Toast.makeText(Launcher.this, "There is internet connection", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(Launcher.this, "There is no internet connection", Toast.LENGTH_SHORT).show();
                    }
                }
            });
Run Code Online (Sandbox Code Playgroud)

我有一个Utils类,它是一个带有静态方法的final类,observable使用的方法是这样的:

    public static boolean isActiveInternetConnection(Context context) {
    if (isNetworkAvailable(context)) {
        try {
            HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection());
            urlc.setRequestProperty("User-Agent", "Test");
            urlc.setRequestProperty("Connection", "close");
            urlc.setConnectTimeout(1500);
            urlc.connect();
            return (urlc.getResponseCode() == 200);
        } catch (IOException e) {
            Log.e("network", "Error checking internet connection", e);
        }
    } else {
        Log.d("network", …
Run Code Online (Sandbox Code Playgroud)

java android rx-java

11
推荐指数
2
解决办法
8590
查看次数

Android RxJava,非阻塞?

据我所知,rxjava-android在一个单独的线程上执行操作(当提供正确的调度程序时),导致非阻塞操作,但是快速而肮脏的测试似乎证明这是不正确的.

我使用了以下代码片段,在两种情况下,UI都被阻止了......

片段1

Observable observable = Observable.create(new Observable.OnSubscribe<Object>() {
  @Override
  public void call(Subscriber<? super Object> subscriber) {
    int i = 0;
    while (i == 0) {}
    subscriber.onCompleted();
  }
});
observable.subscribeOn(Schedulers.newThread());
observable.observeOn(AndroidSchedulers.mainThread());
observable.subscribe();
Run Code Online (Sandbox Code Playgroud)

片段2

Observable observable = Observable.create(new Observable.OnSubscribe<Object>() {
  @Override
  public void call(Subscriber<? super Object> subscriber) {
    SystemClock.sleep(5000);
    subscriber.onCompleted();
  }
});
observable.subscribeOn(Schedulers.newThread());
observable.observeOn(AndroidSchedulers.mainThread());
observable.subscribe();
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?

android rx-java

9
推荐指数
1
解决办法
4429
查看次数

NetworkOnMainThreadException with retrofit-beta2和rxjava

我最近从retroft-beta1升级,这是有效的.我有以下API接口:

public interface Service {
    @POST("path")
    Observable<Object> service();
}
Run Code Online (Sandbox Code Playgroud)

以下电话:

service.service()
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe();
Run Code Online (Sandbox Code Playgroud)

它会抛出NetworkOnMainThreadException.但这是在改造beta1.

android rx-java retrofit

3
推荐指数
1
解决办法
819
查看次数