Android findViewById(),getComponentName()和getSystemService():无法对类型为活动

时间:2015-05-28 20:00:18

标签: java android android-activity compiler-errors

在下面的类中,我在enableAssistedSearch方法中收到以下三个编译器错误。

  • 无法对非静态方法进行静态引用 来自getSystemService(String)

  • 类型的Activity
  • 无法对非静态方法进行静态引用 来自getComponentName()

  • 类型的Activity
  • 无法对非静态方法进行静态引用 来自findViewById(int)

  • 类型的Activity

我正在使用Eclipse,“清理项目”没有帮助。

此外,该类还包含另一个findViewById调用,但这不会引发任何错误,这非常令人困惑。

package practiceTests.test2.assistedSearchUsingSearchWidget;

import android.app.Activity;
import android.app.SearchManager;
import android.app.SearchableInfo;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.SearchView;
import android.widget.TextView;

public class SearchActivity extends Activity {
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_search);
        textView = (TextView) findViewById(R.id.searchActivity_textView);

        enableAssistedSearch();

        handleIntent(getIntent());
    }


    /**
     * 
     */
    private static void enableAssistedSearch() {
        // SearchManager => provides access to the system search services.
        // Context.getSystemService() => Return the handle to a system-level
        // service by name. The class of the returned object varies by the
        // requested name.
        // Context.SEARCH_SERVICE => Returns a SearchManager for handling search
        // Context = Interface to global information about an application
        // environment. This is an abstract class whose implementation is
        // provided by the Android system. It allows access to
        // application-specific resources and classes, as well as up-calls for
        // application-level operations such as launching activities,
        // broadcasting and receiving intents, etc.
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);//**************************
        //getSearchableInfo() => gets information about a searchable activity. @return => the activity to get searchable information for.
        SearchableInfo searchableInfo = searchManager.getSearchableInfo(getComponentName());//**************************

        SearchView searchView = (SearchView) findViewById(R.id.searchView);//**************************
    }


    /**
     * 
     */
    protected void onNewIntent(Intent intent) {
        setIntent(intent);
        handleIntent(intent);
    }


    /**
     * 
     */
    private void handleIntent(Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SEARCH)) {
            performSearch(intent.getStringExtra(SearchManager.QUERY));
        }
    }


    /**
     * 
     */
    private void performSearch(String searchQuery) {
        textView.setText(searchQuery);
    }

}

我无法弄明白为什么!那么有人可以指出任何问题,或建议我应该做什么?

2 个答案:

答案 0 :(得分:1)

因为你的方法是static并且它不允许访问对象实例本身,并且因为findViewByIdActivity的方法,但你无法访问实例本身,你得到这个编译时错误,等等其他错误

答案 1 :(得分:1)

以下是您声明的内容:

  

私人静态 void enableAssistedSearch()

你应该尝试删除“静态”一词

getSystemService(String),getComponentName(),findViewById(int)被定义为从超类Activity(甚至基类Context)继承的成员方法。成员方法是对象实例的一部分,它坚持处理自身的某些事情,并暗示在创建对象实例后调用它。

静态方法允许在静态范围内创建任何对象实例之前调用。在此期间,您可以假设没有Activity实例存在,因此无法调用这3个成员方法。

请注意,您通常不会创建Activity的新实例,但是android sdk会这样做。