简体   繁体   English

EditText的值未出现在我的日志中

[英]Value of EditText not appearing in my logs

I an new to Android. 我是Android的新手。 I have the following code for a Twitter Client search: 对于Twitter客户端搜索,我具有以下代码:

package com.michaelnares.twitterclient;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.*;
import twitter4j.*;
import twitter4j.conf.ConfigurationBuilder;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

/**
 * Created by michael on 01/05/2014.
 */
public class SearchActivity extends Activity {

    EditText queryEditText = null;
    String queryText = null;
    private Context context = this;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.search);
        queryEditText = (EditText) findViewById(R.id.queryEditText);
        queryText = (queryEditText.getText().toString());
        final Context context = this;

        Button queryButton = (Button) findViewById(R.id.queryButton);
        queryButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.i(LogConstants.LOG, "Text value is " + queryText);
                if (queryText.equals(null)) {
                    Toast.makeText(context, "You did not enter a query", Toast.LENGTH_SHORT).show();
                } else {
                    new SearchAsyncTask().execute();
                    }
            }
        });
    } // ends onCreate()

    private class SearchAsyncTask extends AsyncTask<String, String, ArrayList<String>>
    {

       private ProgressDialog dialog = new ProgressDialog(SearchActivity.this);
        private ArrayList<String> searchResults;

        @Override
        protected void onPreExecute()
        {
            super.onPreExecute();
            dialog.setMessage("Getting data...");
            dialog.setIndeterminate(false);
            dialog.setCancelable(true);
            dialog.show();
        }

        @Override
        protected ArrayList<String> doInBackground(String... strings) {
            APIClient client = new APIClient();
            searchResults = client.getQueryResults(queryText);
            return searchResults;
        }

        @Override
        protected void onPostExecute(ArrayList<String> results)
        {
            dialog.dismiss();
            results.addAll(searchResults);
            if (searchResults == null)
            {
                Log.w(LogConstants.LOG, "searchResults is null");
            }
            final ListView searchListView = (ListView) findViewById(R.id.searchListView);
            final ArrayAdapter adapter = new ArrayAdapter(context, android.R.layout.simple_list_item_1, results);
            adapter.notifyDataSetChanged();
            searchListView.setAdapter(adapter);
        }
    }
} //ends class

The issue is, I have tried to log the results of the EditText, however I never see that in the logs. 问题是,我试图记录EditText的结果,但是我从没有在日志中看到。 What is going on here? 这里发生了什么? I can't work out why I'm never seeing "Text value is " + queryText in the logs. 我无法弄清楚为什么我在日志中始终看不到“文本值为” + queryText。

Change 更改

 Log.i(LogConstants.LOG, "Text value is " + queryText);

to

 Log.i(LogConstants.LOG, "Text value is " + queryEditText.getText().toString());

Move queryText = (queryEditText.getText().toString()); 移动queryText = (queryEditText.getText().toString());

inside the onClick 里面的onClick

    queryButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            queryText = (queryEditText.getText().toString());
            Log.i(LogConstants.LOG, "Text value is " + queryText);
            if ("".equals(queryText)) {
                Toast.makeText(context, "You did not enter a query", Toast.LENGTH_SHORT).show();
            } else {
                new SearchAsyncTask().execute();
                }
        }
    });

The problem is you initialize the String value queryText in the event of the screen being created (onCreate()) and not when you actually type in values (after screen creation & dynamic activity on the screen). 问题是在创建屏幕时(onCreate())而不是在实际键入值时(在屏幕上创建屏幕并在屏幕上进行动态活动后)初始化字符串值queryText。

This is why the following would work 这就是为什么以下方法会起作用的原因

     @Override
                public void onClick(View view) {
 queryText = (queryEditText.getText().toString());
                    Log.i(LogConstants.LOG, "Text value is " + queryText);
                    if (queryText.equals("")) {
                        Toast.makeText(context, "You did not enter a query", Toast.LENGTH_SHORT).show();
                    } else {
                        new SearchAsyncTask().execute();
                        }
                }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM