BugAdder
BugAdder

Reputation: 53

Android TextView is not showing data on setText even if data is present

I'm working on a small project where a user is shown his result after he tries to login and he already taken the quiz on my app.

So i'm using a page like this to display result.

But i cannot display my score. This page also has an option to share your score which is working fine and displaying score.Share option containing result.

I'm attaching my XML and Java Code kindly please help me solve the issue that'll be great help.

Thanks & Regards

BugAdder

XML Code:

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center|top">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:padding="20dp"
        android:textAlignment="center"
        android:textSize="25sp"
        android:textStyle="bold"
        android:text="@string/login_score_title"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:padding="20dp"
        android:textSize="25sp"
        android:textStyle="bold"
        android:text="@string/score_result"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:textStyle="bold"
        android:id="@+id/login_score_text"/>

    <Button
        android:padding="20dp"
        android:layout_marginTop="75dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/login_share_button"
        android:text="@string/share_button"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="20dp"
        android:text="@string/exit_button"
        android:drawableEnd="@drawable/arrow_right"
        android:drawableRight="@drawable/arrow_right"
        android:id="@+id/login_exit_button"/>


</LinearLayout>

</ScrollView>

Java Code:

public class QuizLoginScore extends AppCompatActivity {

    private List<ScoreItem> mScoreItems = new ArrayList<>();
    private ProgressDialog mProgressDialog;
    private String mScore;
    private TextView mScoreTextView;
    private Button mShareButton;
    private Button mExitButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.score_login_quiz);
        mScoreTextView = (TextView)findViewById(R.id.login_score_text);
        mShareButton = (Button)findViewById(R.id.login_share_button);
        mExitButton = (Button)findViewById(R.id.login_exit_button);
        new FetchScoresTask().execute();
        mScoreTextView.setText(mScore);
        mExitButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(Build.VERSION.SDK_INT >= 21){
                    finishAndRemoveTask();
                }else{
                    finishAffinity();
                    System.exit(0);
                }
            }
        });

        mShareButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(Intent.ACTION_SEND);
                i.setType("text/plain");
                i.putExtra(Intent.EXTRA_TEXT,getScoreShareReport(mScore));
                i.putExtra(Intent.EXTRA_SUBJECT,getString(R.string.score_report_subject));
                i = Intent.createChooser(i,getString(R.string.send_report));
                startActivity(i);
            }
        });

    }

    public String getScoreShareReport(String score){
        String result;
        StringBuilder sb = new StringBuilder();
        sb.append("QuizApp!").
                append("\n\n").
                append("I Just Scored").
                append(" \' ").
                append(score).
                append(" \' ").
                append("marks out of \' 100 \' in Latest Quiz on QuizApp!\nWhats your Score Huh?");
        result = sb.toString();
        return result;
    }

    private class FetchScoresTask extends AsyncTask<Void, Void, List<ScoreItem>> {
        @Override
        protected void onPreExecute() {

            mProgressDialog = new ProgressDialog(QuizLoginScore.this);
            mProgressDialog.setTitle("Downloading Score");
            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            mProgressDialog.setMessage("Please wait while the score is being downloaded!");
            mProgressDialog.setCancelable(false);
            mProgressDialog.show();
        }

        @Override
        protected List<ScoreItem> doInBackground(Void... params) {
            return new ScoreFetcher().fetchScoreItems();
        }

        @Override
        protected void onPostExecute(List<ScoreItem> scoreItems) {
            mScoreItems = scoreItems;
            for(int i = 0; i < mScoreItems.size(); i++){
                if(mScoreItems.get(i).getUserId().equals(QuizLogin.mUserIdString)){
                    mScore = String.valueOf(mScoreItems.get(i).getScore());
                    break;
                }
            }
            mProgressDialog.dismiss();
        }

    }
}

Upvotes: 1

Views: 1015

Answers (3)

Ferdous Ahamed
Ferdous Ahamed

Reputation: 21736

Set text from onPostExecute():

        @Override
        protected void onPostExecute(List<ScoreItem> scoreItems) {
            mScoreItems = scoreItems;
            for(int i = 0; i < mScoreItems.size(); i++){
                if(mScoreItems.get(i).getUserId().equals(QuizLogin.mUserIdString)){
                    mScore = String.valueOf(mScoreItems.get(i).getScore());
                    mScoreTextView.setText(mScore);

                    break;
                }
            }
            mProgressDialog.dismiss();
        }

Upvotes: 0

Haris ali
Haris ali

Reputation: 783

Put your mScore string in log to see if you are getting the data in logcat. Also try changing the color of your textview. Also put your textview.settext() in onpostexecute(); method

Upvotes: 0

user7676575
user7676575

Reputation: 141

mScore is set in a async task. so you must set text in onPostExecute. try following code:

public class QuizLoginScore extends AppCompatActivity {

        private List<ScoreItem> mScoreItems = new ArrayList<>();
        private ProgressDialog mProgressDialog;
        private String mScore;
        private TextView mScoreTextView;
        private Button mShareButton;
        private Button mExitButton;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.score_login_quiz);
            mScoreTextView = (TextView)findViewById(R.id.login_score_text);
            mShareButton = (Button)findViewById(R.id.login_share_button);
            mExitButton = (Button)findViewById(R.id.login_exit_button);
            new FetchScoresTask().execute();
            mScoreTextView.setText(mScore);
            mExitButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(Build.VERSION.SDK_INT >= 21){
                        finishAndRemoveTask();
                    }else{
                        finishAffinity();
                        System.exit(0);
                    }
                }
            });

            mShareButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent i = new Intent(Intent.ACTION_SEND);
                    i.setType("text/plain");
                    i.putExtra(Intent.EXTRA_TEXT,getScoreShareReport(mScore));
                    i.putExtra(Intent.EXTRA_SUBJECT,getString(R.string.score_report_subject));
                    i = Intent.createChooser(i,getString(R.string.send_report));
                    startActivity(i);
                }
            });

        }

        public String getScoreShareReport(String score){
            String result;
            StringBuilder sb = new StringBuilder();
            sb.append("QuizApp!").
                    append("\n\n").
                    append("I Just Scored").
                    append(" \' ").
                    append(score).
                    append(" \' ").
                    append("marks out of \' 100 \' in Latest Quiz on QuizApp!\nWhats your Score Huh?");
            result = sb.toString();
            return result;
        }

        private class FetchScoresTask extends AsyncTask<Void, Void, List<ScoreItem>> {
            @Override
            protected void onPreExecute() {

                mProgressDialog = new ProgressDialog(QuizLoginScore.this);
                mProgressDialog.setTitle("Downloading Score");
                mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                mProgressDialog.setMessage("Please wait while the score is being downloaded!");
                mProgressDialog.setCancelable(false);
                mProgressDialog.show();
            }

            @Override
            protected List<ScoreItem> doInBackground(Void... params) {
                return new ScoreFetcher().fetchScoreItems();
            }

            @Override
            protected void onPostExecute(List<ScoreItem> scoreItems) {
                mScoreItems = scoreItems;
                for(int i = 0; i < mScoreItems.size(); i++){
                    if(mScoreItems.get(i).getUserId().equals(QuizLogin.mUserIdString)){
                        mScore = String.valueOf(mScoreItems.get(i).getScore());

            mScoreTextView.setText(mScore);
                        break;
                    }
                }
                mProgressDialog.dismiss();
            }

        }
    }

Upvotes: 2

Related Questions