Java 我如何解决点击按钮时应用程序崩溃的问题?

Java 我如何解决点击按钮时应用程序崩溃的问题?,java,firebase,android-studio,Java,Firebase,Android Studio,每当我按下第二个按钮(fireb),我的应用程序就会崩溃。但是,第一个按钮(单击)工作正常 public class MainActivity extends AppCompatActivity { Button click; public static TextView data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(s

每当我按下第二个按钮(fireb),我的应用程序就会崩溃。但是,第一个按钮(单击)工作正常

public class MainActivity extends AppCompatActivity {

    Button click;

    public  static TextView data;

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

        click = (Button) findViewById(R.id.button);
        data = (TextView) findViewById(R.id.fetcheddata);

        click.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                fetchData process = new fetchData();

                process.execute();

            }

        });

        Button fireb =(Button) findViewById(R.id.fire);

        fireb.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Member go = new Member();

                go.execute();
                DatabaseReference reff;
                reff= FirebaseDatabase.getInstance().getReference().child("Member");
                reff.push().setValue(go);
                Toast.makeText(MainActivity.this,"Data Inserted Sucessfully",Toast.LENGTH_LONG).show();
            }
        });
实际上,我想用对象“go”执行类“Member”,然后将“go”中包含的数据发布到firebase数据库

这是坠机日志

--------- beginning of crash
05-11 14:35:51.301 3457-3457/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.myapplication, PID: 3457
    com.google.firebase.database.DatabaseException: Invalid key: . Keys must not contain '/', '.', '#', '$', '[', or ']'
        at com.google.firebase.database.core.utilities.Validation.validateWritableKey(com.google.firebase:firebase-database@@19.3.0:120)
        at com.google.firebase.database.core.utilities.Validation.validateWritableObject(com.google.firebase:firebase-database@@19.3.0:103)
        at com.google.firebase.database.DatabaseReference.setValueInternal(com.google.firebase:firebase-database@@19.3.0:283)
        at com.google.firebase.database.DatabaseReference.setValue(com.google.firebase:firebase-database@@19.3.0:159)
        at com.example.myapplication.MainActivity$2.onClick(MainActivity.java:51)
        at android.view.View.performClick(View.java:4780)
        at android.view.View$PerformClick.run(View.java:19866)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
05-11 14:36:01.830 3457-3472/? I/art: Background partial concurrent mark sweep GC freed 17161(834KB) AllocSpace objects, 9(611KB) LOS objects, 39% free, 3MB/5MB, paused 545us total 172.404ms
05-11 14:36:05.223 3457-3457/? I/Process: Sending signal. PID: 3457 SIG: 9
这是成员类

public class Member extends AsyncTask<Void,Void,Void> {
    String mdata = "";
    String ad_id = "";
    String price = "";
    String username = "";

    @Override
    protected Void doInBackground(Void... voids) {

        try {
                   .
                   . 
                   .
            JSONObject JO1 = new JSONObject(mdata);
            JSONObject JO2 = JO1.getJSONObject("data");
            JSONArray JA = JO2.getJSONArray("ad_list");
            JSONObject JO3 = JA.getJSONObject(0);
            JSONObject JO4 = JO3.getJSONObject("data");
            JSONObject JO5 = JO4.getJSONObject("profile");

            username = (JO5.getString("username")).trim();
            ad_id = JO4.getString("ad_id").trim();
            price = JO4.getString("temp_price").trim();


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }


        return null;
    }

}
公共类成员扩展异步任务{
字符串mdata=“”;
字符串ad_id=“”;
字符串价格=”;
字符串username=“”;
@凌驾
受保护的空位背景(空位…空位){
试一试{
.
. 
.
JSONObject JO1=新的JSONObject(mdata);
JSONObject JO2=JO1.getJSONObject(“数据”);
JSONArray JA=JO2.getJSONArray(“ad_列表”);
JSONObject JO3=JA.getJSONObject(0);
JSONObject JO4=JO3.getJSONObject(“数据”);
JSONObject JO5=JO4.getJSONObject(“profile”);
username=(JO5.getString(“username”).trim();
ad_id=JO4.getString(“ad_id”).trim();
price=JO4.getString(“temp_price”).trim();
}捕获(格式错误){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}捕获(JSONException e){
e、 printStackTrace();
}
返回null;
}
}

可能很简单,但我正在开发我的第一个应用:)

此问题与firebase有关,如日志所示。

原因是您使用以下设置值:

无效密钥:。键不能包含“/”、“.”、“#”、“$”、“[”或“]

但是在看了你的代码之后,有一些东西我不明白

            go.execute();
            DatabaseReference reff;
            reff= FirebaseDatabase.getInstance().getReference().child("Member");
            reff.push().setValue(go);

您执行异步任务,而不听取结果。

如果需要,我可以从代码中删除它。我只是想把它发到firebase上。如果你能向我推荐修复方案,那就太好了。试着调试你的代码。它将使您能够更深入地了解它的工作原理以及问题所在。错误消息说:“键不能包含“/”、“.”、“#”、“$”、“[”或“].”。这意味着您试图写入数据库的路径中有一个不允许的字符,特别是MainActivity.java的第51行。很可能您的
公共类成员扩展了AsyncTask{
在某处生成了一个不允许的字符。该
扩展了AsyncTask{
在与数据库交互时非常罕见,我强烈建议将
异步任务
与写入/读取数据库的数据分离。@FrankvanPuffelen我现在只需要解决方案,正如我所说的,我强烈建议将
异步任务
与写入/读取数据库的数据分离或者只需创建一个包含
成员的四个成员的
映射