java - 如果在 Java/Android Studio 中选中相应的复选框,则将多个 TextView 传输到 "compose email"

标签 java android android-intent checkbox onclick

编辑:我无法发表评论,尽管这是我自己的问题。所以我要在这里发表我的评论。我多次检查了我的复选框及其 ID,一切似乎都很好。尝试过重命名以及我能想到的任何东西。仍然没有解决。您知道还有什么可能导致该错误吗?

原帖: 我已经尝试解决这个问题几个小时了,希望得到一些帮助。我对编码非常陌生 - 参加在线类(class),这是我的期末项目。

我为此 Activity 创建了 7 个 XML 布局。我使用按钮从布局 1 切换到布局 2 等,并且该部分有效。我在 5 个 XML 布局中添加了多个复选框。单击“提交”按钮时,每个选中的复选框上方的文本应该填充到电子邮件应用程序的“撰写电子邮件”中。当我尝试运行它时,它会一直工作,直到我按下最后一个按钮 - 那就是应用程序崩溃的时候。

package com.example.android.theultimatebakingsodaguide;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;

import android.content.Intent;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

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

    }

    public void healthPage(View view) {
        // TODO: Find a reference to the ImageView in the layout. Change the image.

        ScrollView scrollHealthPage = (ScrollView)findViewById(R.id.scroll_health_page);
        setContentView(R.layout.health_page);

    }

    public void beautyPage(View view) {
        // TODO: Find a reference to the ImageView in the layout. Change the image.

        ScrollView scrollBeautyPage = (ScrollView)findViewById(R.id.scroll_beauty_page);
        setContentView(R.layout.beauty_page);

    }

    public void personalCarePage(View view) {
        // TODO: Find a reference to the ImageView in the layout. Change the image.

        ScrollView scrollPersonalCarePage = (ScrollView)findViewById(R.id.scroll_personal_care_page);
        setContentView(R.layout.personal_care_page);

    }
    public void cleaningPage(View view) {
        // TODO: Find a reference to the ImageView in the layout. Change the image.

        ScrollView scrollCleaningPage = (ScrollView)findViewById(R.id.scroll_cleaning_page);
        setContentView(R.layout.cleaning_page);

    }
    public void deodorizingPage(View view) {
        // TODO: Find a reference to the ImageView in the layout. Change the image.

        ScrollView scrollDeodorizingPage = (ScrollView)findViewById(R.id.scroll_deodorizing_page);
        setContentView(R.layout.deodorizing_page);

    }
    public void favoritesPage(View view) {

        LinearLayout scrollDeodorizingPage = (LinearLayout)findViewById(R.id.favorites_linear);
        setContentView(R.layout.favorite_tips);

    }

    public void emailFavorites(View view) {
        CheckBox healthFav01 = (CheckBox) findViewById(R.id.health_fav_01);
        boolean pickHealthFav01 = healthFav01.isChecked();

        CheckBox healthFav02 = (CheckBox) findViewById(R.id.health_fav_02);
        boolean pickHealthFav02 = healthFav02.isChecked();


        EditText emailText = (EditText) findViewById(R.id.my_email);
        String userEmail = emailText.getText().toString();

        String tipSummary = favoriteTipsSummary(pickHealthFav01, pickHealthFav02);

        Intent intent = new Intent(Intent.ACTION_SENDTO);
        intent.setData(Uri.parse("mailto:")); // only email apps should handle this
        intent.putExtra(Intent.EXTRA_SUBJECT, "Your favorite baking soda tips");
        intent.putExtra(Intent.EXTRA_TEXT, "The baking soda tips you selected are here!" + tipSummary);
        intent.putExtra(Intent.EXTRA_EMAIL, userEmail);
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivity(intent);
        }
    }


    private String favoriteTipsSummary(boolean pickHealthFav01, boolean pickHealthFav02) {
        String tipSummary = "We hope those are helpful!";
        TextView healthTip01 = (TextView) findViewById(R.id.health_tip_01);
        String sHealthTip01 = healthTip01.getText().toString();
        if (pickHealthFav01) {tipSummary += sHealthTip01;}
        TextView healthTip02 = (TextView) findViewById(R.id.health_tip_02);
        String sHealthTip02 = healthTip02.getText().toString();
        if (pickHealthFav02) {tipSummary += sHealthTip02;}
        return tipSummary;
    }

}

我已为每个复选框及其相应的 TextView 分配了 ID。 我尝试仅为前两个复选框编写代码来测试它是否有效。当我弄清楚后,我会对其余的人做同样的事情(我有很多)。我知道这对于我目前的水平来说太复杂了,但我正在尝试挑战自己并边做边学。请帮忙!提前致谢!

附注以下是我收到的错误消息(请向右滚动)。我在代码中找不到错误。

FATAL EXCEPTION: main
Process: com.example.android.theultimatebakingsodaguide, PID: 23472
 java.lang.IllegalStateException: Could not execute method for android:onClick
 at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:275)
 at android.view.View.performClick(View.java:5204)
 at android.view.View$PerformClick.run(View.java:21153)
 at android.os.Handler.handleCallback(Handler.java:739)
 at android.os.Handler.dispatchMessage(Handler.java:95)
 at android.os.Looper.loop(Looper.java:148)
 at android.app.ActivityThread.main(ActivityThread.java:5417)
 at java.lang.reflect.Method.invoke(Native Method)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
 Caused by: java.lang.reflect.InvocationTargetException
 at java.lang.reflect.Method.invoke(Native Method)
 at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270)
 at android.view.View.performClick(View.java:5204) 
 at android.view.View$PerformClick.run(View.java:21153) 
 at android.os.Handler.handleCallback(Handler.java:739) 
 at android.os.Handler.dispatchMessage(Handler.java:95) 
 at android.os.Looper.loop(Looper.java:148) 
 at android.app.ActivityThread.main(ActivityThread.java:5417) 
 at java.lang.reflect.Method.invoke(Native Method) 
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.widget.CheckBox.isChecked()' on a null object reference
 at com.example.android.theultimatebakingsodaguide.MainActivity.emailFavorites(MainActivity.java:76)
 at java.lang.reflect.Method.invoke(Native Method) 
 at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270) 
 at android.view.View.performClick(View.java:5204) 
 at android.view.View$PerformClick.run(View.java:21153) 
 at android.os.Handler.handleCallback(Handler.java:739) 
 at android.os.Handler.dispatchMessage(Handler.java:95) 
 at android.os.Looper.loop(Looper.java:148) 
 at android.app.ActivityThread.main(ActivityThread.java:5417) 
 at java.lang.reflect.Method.invoke(Native Method) 
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

最佳答案

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.widget.CheckBox.isChecked()' on a null

object reference at com.example.android.theultimatebakingsodaguide.MainActivity.emailFavorites(MainActivity.java:76)

boolean pickHealthFav01 = healthFav01.isChecked(); 是错误发生的地方。检查该复选框是否位于您所引用的 Activity 内。另请检查您是否引用了正确的 ID。

或者尝试类似的东西,

if (healthFav01.isChecked() != null){
//do the assignments
}

但这不是最佳实践。如果您有任何问题,请告诉我

关于java - 如果在 Java/Android Studio 中选中相应的复选框,则将多个 TextView 传输到 "compose email",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35910214/

相关文章:

android - NullPointerException 上下文静态方法

android - 如何在 Android 的 Web Intent 中启动本地 HTML 页面?

java - 读写锁。了解从 readLock 升级到 writeLock

java util Date 与 Criteria api 的比较未按预期工作

java - 动态格式化字符串

java - 使用套接字的聊天应用程序无法在 Java 中通过 Internet 工作

Android:使搜索在整个应用程序中可用

java - 在android中使用Thread不安全吗?

android - 调用照片 Intent

java - 短信管理器不工作。我还在 list 中包含了许可