我正在尝试使用一系列电影并将它们放在列表视图中。 调试之后,唯一导致活动崩溃的是使用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();
}
}
我认为这是相关的logcat。
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
答案 0 :(得分:0)
使用Context
参数删除构造函数。
public DisplayMoviesActivity(Context context) {
this.context = context;
}
而是将Context
传递给displayMovies
方法的对象。
请提供您班级的代码。
注意强>
你的代码清楚地表明编写它的人缺乏常见的android开发知识。
结束注释
示例:强>
Helper helper = new Helper(this);
helper.displayMovies(//);
答案 1 :(得分:0)
仔细查看the docs for Activity
会显示以下继承层次结构:
java.lang.Object
↳ android.content.Context
↳ android.content.ContextWrapper
↳ android.view.ContextThemeWrapper
↳ android.app.Activity
请注意,Context
是Activity
的祖先。这意味着Activity
是 Context
。 Activity
sublcass中不需要接受Context
的构造函数。 (此外,永远不会调用此构造函数。)
如果需要Context
的代码出现在Activity
子类中的方法中,则可以使用this
来引用当前的Activity
对象(即也是Context
):
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, movies);