我正在尝试在我的Angular 5项目中创建一个服务,该服务将处理向用户显示的flash消息。我很高兴使用由HttpClient之类的东西创建的observable,但我从来没有理解如何创建和使用我自己的。
似乎逻辑路径是在服务上公开一个Observable,一个UI组件在发出时订阅并显示来自所述observable的数据,并且应用程序的其他部分可以发送消息到可观察的。
我可以订阅可观察和显示数据,但是如何设置一个可观察到的被发送数据?我是否正确地采取了这种方式?
到目前为止,我的努力是使用W
,但这似乎不起作用。以下简化代码。
package com.example.sourabhkumargupta.blood_donor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
public class signup_form extends AppCompatActivity {
private DatabaseHelper databaseHelper;
Spinner dropdown;
Button form_submit;
EditText name,email,password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signup_form);
dropdown = (Spinner) findViewById(R.id.dropdown);
String[] items = new String[]{"select Blood Group","A-","A+","B-","B+"};
final ArrayAdapter adapter = new ArrayAdapter<>(this,android.R.layout.simple_spinner_dropdown_item,items);
dropdown.setAdapter(adapter);
name = (EditText) findViewById(R.id.name);
email = (EditText) findViewById(R.id.email);
password = (EditText) findViewById(R.id.password);
form_submit = (Button) findViewById(R.id.form_submit);
final DatabaseHelper databaseHelper = new DatabaseHelper(this);
form_submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean result = databaseHelper.insertData(name.getText().toString(),email.getText().toString(),
dropdown.toString(),password.getText().toString());
if(result==true)
Toast.makeText(signup_form.this,"Added",Toast.LENGTH_SHORT);
else
Toast.makeText(signup_form.this,"Fail",Toast.LENGTH_SHORT);
}
});
}
}
不会抛出任何错误,但订阅者似乎没有收到已发送的消息。
答案 0 :(得分:1)
解决!我的代码实际上是正确的,但发送消息的组件位于不同的模块中(设置了不同的提供程序),所以 - 我认为 - 多个服务(以及可观察的)并行运行。发件人和订阅者都没有收听同一个观察者。
TL; DR,请确保您不会多次提供Flash服务!在我的顶层模块提供它对我来说足够了。