在下面的类中,我在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);
}
}
我无法弄明白为什么!那么有人可以指出任何问题,或建议我应该做什么?
答案 0 :(得分:1)
因为你的方法是static
并且它不允许访问对象实例本身,并且因为findViewById
是Activity
的方法,但你无法访问实例本身,你得到这个编译时错误,等等其他错误
答案 1 :(得分:1)
以下是您声明的内容:
私人静态 void enableAssistedSearch()
你应该尝试删除“静态”一词
getSystemService(String),getComponentName(),findViewById(int)被定义为从超类Activity(甚至基类Context)继承的成员方法。成员方法是对象实例的一部分,它坚持处理自身的某些事情,并暗示在创建对象实例后调用它。
静态方法允许在静态范围内创建任何对象实例之前调用。在此期间,您可以假设没有Activity实例存在,因此无法调用这3个成员方法。
请注意,您通常不会创建Activity的新实例,但是android sdk会这样做。