2016-08-03 114 views
2

我想学RxAndroid但我已经提到了行operationObservable.subscribe(new Subscriber() {和另一行.create(new Observable.OnSubscribe() {中的错误。这是为什么?RxAndroid:类必须声明为抽象或实现抽象方法的错误

import android.app.Activity; 
import android.os.Bundle; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 

import rx.Observable; 
import rx.Subscriber; 

public class MainActivity extends AppCompatActivity { 
    Button button; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final Activity activity = this; 

     button = (Button) findViewById(R.id.button); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(final View v) { 
       v.setEnabled(false); 
       operationObservable.subscribe(new Subscriber() { 
        @Override 
        public void onCompleted() { 
         v.setEnabled(true); 
        } 

        @Override 
        public void onError(Throwable e) {} 

        @Override 
        public void onNext(String value) { 
         Snackbar.make(findViewById(android.R.id.content), value, Snackbar.LENGTH_LONG).show(); 
        } 
       }); 
      } 
     }); 
    } 

    public String longRunningOperation() { 
     try { 
      Thread.sleep(2000); 
     } catch (InterruptedException e) { 
      // error 
     } 
     return "Complete!"; 
    } 

    final Observable operationObservable = Observable 
      .create(new Observable.OnSubscribe() { 
       @Override 
       public void call(Subscriber subscriber) { 
        subscriber.onNext(longRunningOperation()); 
        subscriber.onCompleted(); 
       } 
      }); 
//   .subscribeOn(Schedulers.io()) // subscribeOn the I/O thread 
//   .observeOn(AndroidSchedulers.mainThread()); // observeOn the UI Thread 
} 

回答

2

您应泛型方法

 new Observable.OnSubscribe() { 
      @Override 
      public void call(Subscriber subscriber) { 
       subscriber.onNext(longRunningOperation()); 
       subscriber.onCompleted(); 
      } 
     }); 

应由

 new Observable.OnSubscribe<Subscriber>() { 
      @Override 
      public void call(Subscriber subscriber) { 
       subscriber.onNext(longRunningOperation()); 
       subscriber.onCompleted(); 
      } 
     }); 

希望这有助于更换使用它。

+0

这有助于看起来比我的想法更漂亮。 – y07k2

+0

很高兴帮助你:) – Sanjeev

1

需要改变

public void call(Subscriber subscriber) {

public void call(Object o) {

,然后浇铸的参数Subscriber的方法内。

相关问题