2016-08-03 10 views
2

Ich versuche, RxAndroid zu lernen, aber ich habe Fehler in Zeile operationObservable.subscribe(new Subscriber() { und anderen in Zeile .create(new Observable.OnSubscribe() { erwähnt. Warum das?RxAndroid: Klasse muss entweder abstrakt erklärt werden oder implementieren abstrakte Methode Fehler

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 
} 

Antwort

2

Du sollst es in Generika verwenden Weise

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

wird dies hilft durch

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

Hoffnung ersetzt werden.

+0

Das hilft und sieht hübscher als meine Idee aus. – y07k2

+0

Froh, dass es dir geholfen hat :) – Sanjeev

1

Need

public void call(Subscriber subscriber) {

zu

public void call(Object o) {

gegossen und dann die Parameter zu Subscriber innerhalb des Verfahrens zu ändern.

Verwandte Themen