【问题标题】:Extracting the text from a textview从文本视图中提取文本
【发布时间】:2019-08-27 20:29:38
【问题描述】:

大家好,我需要帮助解决一个我无法解决的微不足道的问题,然后我正在使用 android studio 为 android 编写一个应用程序,该应用程序应该做的是读取 TextView 的内容,纯文本格式没有数字或任何东西,并且基于 TextView 的内容应该更改图像或文本,我不能我尝试编写此代码但它不起作用,请你告诉我我错在哪里并给我写一些代码,谢谢.

    public class CashBackPage extends AppCompatActivity {

        public FirebaseAuth mAuth;
        public AdView adViewTop, adViewBot;

        TextView mLogout;
        TextView mTxtPhone;
        TextView mPhone;
        TextView mReadCash;
        TextView mVersionApp;
        TextView mCodeRappCash;
        TextView mGeneralTextCash, mSendRequestText;
        ImageButton mSendRequest, mCancel;
        LinearLayout mbannerTop, mbannerBot;
        FirebaseDatabase mDatabase;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_cash_back_page);
            mLogout = (TextView) findViewById(R.id.logoutbutn);
            mTxtPhone = (TextView) findViewById(R.id.TextPhone);
            mPhone = (TextView) findViewById(R.id.NumberPhTxt);
            mReadCash = (TextView) findViewById(R.id.ReadCashBack);
            mVersionApp = (TextView) findViewById(R.id.VersionApp);
            mSendRequest = (ImageButton) findViewById(R.id.SendRequestBtn);
            mCancel = (ImageButton) findViewById(R.id.CancelBtn);
            mCodeRappCash = (TextView) findViewById(R.id.CodeDiscountCash);
            mGeneralTextCash = (TextView) findViewById(R.id.textgeneralacash);
            mSendRequestText = (TextView) findViewById(R.id.textsendrequest);

            mSendRequestText.setVisibility(View.GONE);
            mGeneralTextCash.setVisibility(View.GONE);
        mAuth = FirebaseAuth.getInstance();
        initFirebase();

        //Set Orientation Portrait
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        getnumberprefs();

        if (!isEmpty (String.valueOf(mCodeRappCash))){
            String textgen = mCodeRappCash.getText().toString().trim();
            if (textgen.equals("Request code sent...")){

                mSendRequestText.setVisibility(View.VISIBLE);
                mGeneralTextCash.setVisibility(View.GONE);
            }else{

                mSendRequestText.setVisibility(View.GONE);
                mGeneralTextCash.setVisibility(View.VISIBLE);
            }
        }
    }

    @Override
    protected void onStart() {
        super.onStart();

        // Read to the database CashBack
        DatabaseReference myRef = mDatabase.getReference();
        myRef.child("Utenti").child(mPhone.getText().toString()).child("CashBack").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String cashback = dataSnapshot.getValue(String.class);
                mReadCash.setText(cashback);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
        // Read to the database Version App
        myRef.child("Utenti").child(mPhone.getText().toString()).child("Version App").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String versionapp = dataSnapshot.getValue(String.class);
                mVersionApp.setText(versionapp);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
        // Read to the database Code Cash Back
        myRef.child("Utenti").child(mPhone.getText().toString()).child("RappCash Code").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String coderappcash = dataSnapshot.getValue(String.class);
                mCodeRappCash.setText(coderappcash);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
    }

    public void logoutclick(View view) {
        Vibrator vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
        vib.vibrate(30);
        mAuth.signOut();
        updateUI();
    }

    private void initFirebase() {
        mDatabase = FirebaseDatabase.getInstance();
    }

    private void updateUI() {
        FirebaseUser currentuser = mAuth.getCurrentUser();
        if(currentuser == null){
            Intent intTologin = new Intent(this, MainActivity.class);
            finish();
            startActivity(intTologin);
        }
    }

    private void getnumberprefs() {
        SharedPreferences numb = getSharedPreferences(Register.NUMB, MODE_PRIVATE);
        String numberphn = numb.getString(Register.KEY_NUMB,null);
        mPhone.setText(numberphn);
    }

    public void sendrequest(View view) {
        Vibrator vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
        vib.vibrate(30);
        DatabaseReference myRef = mDatabase.getReference();
        myRef.child("Utenti").child(mPhone.getText().toString()).child("RappCash Code").setValue("Request code sent...");
    }

    public void cancelrequest(View view) {
        Vibrator vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
        vib.vibrate(30);
        new CountDownTimer(15000, 1000) {

            public void onTick(long millisUntilFinished) {
                DatabaseReference myRef = mDatabase.getReference();
                myRef.child("Utenti").child(mPhone.getText().toString()).child("RappCash Code").setValue("Request code canceled...");
            }

            public void onFinish() {
                DatabaseReference myRef = mDatabase.getReference();
                myRef.child("Utenti").child(mPhone.getText().toString()).child("RappCash Code").setValue("#RappCashCode");
            }
        }.start();
    }

    private boolean isEmpty (String mCoins) {
        return mCoins.contentEquals("#RappCashCode");
    }
}

所以只有当文本与“发送的请求代码......”相同时,它才会更改另一个文本视图中包含的图像或文本,我在 OnStart 和 OnCreate 中都输入了此代码,但在这两种情况下它都不起作用。

我声明 TextView 读取实时数据库 firebase 的一行内容,并在应用程序中返回写入数据库的内容

【问题讨论】:

  • 我相信当我去读取实时数据库上的非文本格式的值时会出现问题

标签: android string textview


【解决方案1】:

编辑:

好的,关于您的代码,问题很简单。 TextView 检查文本,设置之前。

您首先在 onCreate() 上调用检查:

if (!isEmpty (String.valueOf(mCodeRappCash))){
        String textgen = mCodeRappCash.getText().toString().trim();
        if (textgen.equals("Request code sent...")){

            mSendRequestText.setVisibility(View.VISIBLE);
            mGeneralTextCash.setVisibility(View.GONE);
        }else{

            mSendRequestText.setVisibility(View.GONE);
            mGeneralTextCash.setVisibility(View.VISIBLE);
        }
    }

然后你调用 onStart():

 @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            String coderappcash = dataSnapshot.getValue(String.class);
            mCodeRappCash.setText(coderappcash);
        }

您必须提前获取对数据库的引用,并在检查之前设置您的 TextView。比如:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_cash_back_page);
    mLogout = (TextView) findViewById(R.id.logoutbutn);
    mTxtPhone = (TextView) findViewById(R.id.TextPhone);
    mPhone = (TextView) findViewById(R.id.NumberPhTxt);
    mReadCash = (TextView) findViewById(R.id.ReadCashBack);
    mVersionApp = (TextView) findViewById(R.id.VersionApp);
    mSendRequest = (ImageButton) findViewById(R.id.SendRequestBtn);
    mCancel = (ImageButton) findViewById(R.id.CancelBtn);
    mCodeRappCash = (TextView) findViewById(R.id.CodeDiscountCash);
    mGeneralTextCash = (TextView) findViewById(R.id.textgeneralacash);
    mSendRequestText = (TextView) findViewById(R.id.textsendrequest);

    mSendRequestText.setVisibility(View.GONE);
    mGeneralTextCash.setVisibility(View.GONE);
    mAuth = FirebaseAuth.getInstance();
    initFirebase();

    //Set Orientation Portrait
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    getnumberprefs();

    //You have to set mCodeRappCash value before this check!!!
    // Read to the database Code Cash Back
    DatabaseReference myRef = mDatabase.getReference();

    myRef.child("Utenti").child(mPhone.getText().toString()).child("RappCash Code").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            String coderappcash = dataSnapshot.getValue(String.class);
            mCodeRappCash.setText(coderappcash);
        }

    if (!isEmpty (String.valueOf(mCodeRappCash))){
        String textgen = mCodeRappCash.getText().toString().trim();
        if (textgen.equals("Request code sent...")){

            mSendRequestText.setVisibility(View.VISIBLE);
            mGeneralTextCash.setVisibility(View.GONE);
        }else{

            mSendRequestText.setVisibility(View.GONE);
            mGeneralTextCash.setVisibility(View.VISIBLE);
        }
    }
}
    }

【讨论】:

  • 它不起作用,因为它无法读取TextView的内容
  • 对不起,我虽然 MCodeRappCash 是 EditText 字段。从 textview 获取文本后,您是否尝试记录 textgen 字符串?它显示什么吗?
  • 显示第二个定义而不是第一个,所以下面的一切都有效}else{
  • 那么,第一个语句不起作用?我的意思是如果文本完全是“请求代码发送......”没有任何反应?还是直接进入 else 语句?
  • 检查初始化是否正确。例如,如果您没有拼错 id name(这是很常见的错误)。也许您正在运行时更改对该 TextView 的引用?如果没有完整的代码,或者只是关于这个 TextView 的 sn-ps,很难判断。
【解决方案2】:

我解决并发现了这个平庸的问题,感谢所有回答的人,在解决的代码部分下。

@Override
    protected void onStart() {
        super.onStart();

        // Read to the database CashBack
        DatabaseReference myRef = mDatabase.getReference();
        myRef.child("Utenti").child(mPhone.getText().toString()).child("CashBack").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String cashback = dataSnapshot.getValue(String.class);
                mReadCash.setText(cashback);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
        // Read to the database Version App
        myRef.child("Utenti").child(mPhone.getText().toString()).child("Version App").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String versionapp = dataSnapshot.getValue(String.class);
                mVersionApp.setText(versionapp);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
        // Read to the database Code Cash Back
        myRef.child("Utenti").child(mPhone.getText().toString()).child("RappCash Code").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String coderappcash = dataSnapshot.getValue(String.class);
                mCodeRappCash.setText(coderappcash);

                assert coderappcash != null;
                if (!isEmpty (coderappcash)){
                    if (coderappcash.equals("Request code sent...")){
                        mSendRequestText.setVisibility(View.VISIBLE);
                        mGeneralTextCash.setVisibility(View.GONE);
                    }else{
                        mSendRequestText.setVisibility(View.GONE);
                        mGeneralTextCash.setVisibility(View.VISIBLE);
                    }
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
    }

信息包含在 (coderappcash) 中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    相关资源
    最近更新 更多