java - 即使存在数据,Android TextView 也不会在 setText 上显示数据

标签 java android xml android-studio

我正在做一个小项目,用户在尝试登录后会看到他的结果,并且他已经在我的应用程序上参加了测验。

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

但是我无法显示我的分数。此页面还有一个选项可以分享您的乐谱,该乐谱运行良好并显示乐谱。 Share option containing result.

我附上了我的 XML 和 Java 代码,请帮助我解决这个问题,这将很有帮助。

感谢和问候

错误添加器

XML 代码:

<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 代码:

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();
        }

    }
}

最佳答案

mScore 在异步任务中设置。所以你必须在 onPostExecute 中设置文本。试试下面的代码:

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();
            }

        }
    }

关于java - 即使存在数据,Android TextView 也不会在 setText 上显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43436030/

相关文章:

java - Android 上的 Guava-Splitter 需要 1.7 秒来初始化?

java - 访问不同端口中的 spring security,获取字符串形式的原理数据 'anonymousUser'

android - 在 Android 中验证 edittext

android - 如何在黑莓中运行worklight的 native 代码

java - 如何使用 XPath 解析以下 'tags' 值?

c# - Xml 文档未打包在类库中

Java JPanel 和 JLabel

在 sencha 文本字段上调用焦点时,android 键盘不会弹出

java - java中解析XML的大多数 "SECURE"方式

java - Spring MVC 自定义类属性编辑器