我正在尝试使用一系列的电影,并将它们放在一个列表视图中。调试之后,导致活动崩溃的唯一原因是使用getContext()。我尝试了getApplicationContext(),这也使应用程序崩溃了。我不知道该怎么办。下面是一个类中的一个方法。
private void displayMovies(List<Movie> movies) {
ArrayAdapter adapter = new
ArrayAdapter(DisplayMoviesActivity.getContext(),
android.R.layout.simple_list_item_1, movies);
ListView listView = DisplayMoviesActivity.getListView();
}这是另一门课。
public class DisplayMoviesActivity extends AppCompatActivity {
static ListView displayMoviesView;
static Context context;
public DisplayMoviesActivity(Context context) {
this.context = context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_movies);
displayMoviesView = (ListView) findViewById(R.id.displayMoviesView);
String searchText = (getIntent().getStringExtra("text"));
RottenTomatoesJSON RTJSON = new RottenTomatoesJSON(this);
RTJSON.searchMovieByName(searchText, 12);
}
public static Context getContext() {
return context;
}
public static ListView getListView() {
return displayMoviesView;
}
}每当我尝试启动该活动时,应用程序就会崩溃。这是我用来开始活动的课程。
public void searchMovies(View v){
SearchView searchBar = (SearchView) findViewById(R.id.searchView);
if (searchBar.isIconified() || searchBar.getQuery() == null || searchBar.getQuery() == "") {
Context context = getApplicationContext();
CharSequence text = "Please enter movie to search!";
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
} else {
String searchText = searchBar.getQuery().toString();
Intent intent = new Intent(this, DisplayMoviesActivity.class);
intent.putExtra("text",searchText);
startActivity(intent);
finish();
}
}我想这就是相关的逻辑。
I/art: Background sticky concurrent mark sweep GC freed 2773(224KB)
AllocSpace objects, 0(0B) LOS objects, 17% free, 931KB/1135KB, paused
5.134ms total 40.550ms
W/art: Suspending all threads took: 5.956ms
D/OpenGLRenderer: Render dirty regions requested: true
D/Atlas: Validating map...
I/OpenGLRenderer: Initialized EGL, version 1.4
D/OpenGLRenderer: Enabling debug mode 0
W/EGL_emulation: eglSurfaceAttrib not implemented
W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa638a320, error=EGL_SUCCESS发布于 2016-02-21 03:14:50
删除带有Context参数的构造函数。
public DisplayMoviesActivity(Context context) {
this.context = context;
}相反,将Context传递给displayMovies方法的对象。请提供你们班的代码。
注意事项
您的代码清楚地表明,编写它的人缺乏普通的android开发知识。
尾注
示例:
Helper helper = new Helper(this);
helper.displayMovies(//);发布于 2016-02-21 03:30:10
仔细查看Activity显示了以下继承层次结构:
java.lang.Object
↳ android.content.Context
↳ android.content.ContextWrapper
↳ android.view.ContextThemeWrapper
↳ android.app.Activity请注意,Context是Activity的祖先。这意味着Activity 就是 Context。在接受Activity的Context子目录中不需要构造函数。(此外,这个构造函数将永远不会被调用。)
如果需要Context的代码发生在Activity子类中的方法中,则只需使用this引用当前的Activity对象(也是Context):
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, movies);https://stackoverflow.com/questions/35531804
复制相似问题