我有一个称为 MainActivity.java
的类,该类称为一个AsyncTask
类。最后一个类findViewById()
在执行时返回此错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View <mypackage>.MainActivity.findViewById(int)' on a null object reference
我不明白ImageView
在完成工作R.layout.activity_main
后如何编辑排名AsyncTask
。
MainActivity.java
public class MainActivity extends Activity {
public MainActivity() {}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Connection().execute();
}
}
连接.java
public class Connection extends AsyncTask<String, Void, String> {
public String result;
//I know, this isn't correct, how can i do?
public MainActivity MainActivity;
@Override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
//...
return "a string";
}
protected void onPostExecute(String result) {
super.onPostExecute(result);
//...
// Where the error is generated
ImageView image = (ImageView) MainActivity.findViewById(R.id.image);
//...
}
}
错误是
public MainActivity MainActivity;
永远不会初始化,因此指向null。为了使您的代码正常工作,最小的步骤是在MainActivity中
new Connection(this).execute();
在连接
public class Connection extends AsyncTask<String, Void, String> {
public MainActivity MainActivity;
public Connection(MainActivity activity) {
MainActivity = activity;
}
但是无论如何,在onCreate中创建任务并传递Activity并不是最好的主意。另外,字段名称应始终以小写字母开头。
最好的方法是将ImageView传递给AsyncTask。在启动“活动”之前不要启动任务,而且,在“活动”停止后也不要忘记取消任务。
public final class MainActivity extends Activity {
public MainActivity() {}
private Connection connection;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
html" target="_blank">setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.image);
}
@Override
protected void onStart() {
super.onStart();
if (connection == null || connection.getStatus() != AsyncTask.Status.RUNNING) {
connection = new Connection(imageView);
connection.execute();
}
}
@Override
protected void onStop() {
super.onStop();
if (connection != null && connection.getStatus() == AsyncTask.Status.RUNNING) {
connection.cancel(true);
}
}
}
在Connection.java中,将ImageView存储为WeakReference以避免泄漏。
public final class Connection extends AsyncTask<String, Void, String> {
private final WeakReference<ImageView> imageViewRef;
public Connection(ImageView view) {
imageViewRef = new WeakReference<ImageView>(view);
}
@Override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
//...
return "a string";
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
//...
final ImageView imageView = imageViewRef.get();
// if the Activity is still alive, the ImageView will not be null
if (imageView != null) {
// set an image or whatever you need
image.setImageResource(666);
}
}
问题内容: 我正在尝试将播放器的名称保存为共享的首选项,并通过再次以共享的首选项获取它的名称来使其显示在另一个活动中,但是我的应用程序崩溃了。 致命异常:主要 代码: 播放器 PlayGame.java PlayerName.java 问题答案: 您的应用在以下位置崩溃: 因为。 您忘记在PlayGame活动中进行初始化。
问题内容: 有人可以帮我检查我的代码有什么问题吗?我有4个,并且它们的值已插入到中。现在我想将该项目检索到另一个旋转器中,但得到 我已经检查了每个步骤,但仍然无法找出问题所在。 更新.java 错误的LogCat 我有一个活动,其中有一个微调器,下面的代码对我来说很好用。 问题答案: *方法之一的参数是。正如您在摘录中看到的: …的check ,如果T不是a 或null ,则返回false 。由于
问题内容: 运行我的项目时出现错误。 这是完整的日志: 这是我的ProductDetail.java 谁能告诉我错误在哪里以及如何解决?如果有人可以帮助我,我将非常感激。 问题答案: 您的字符串是这样给你一个。这是导致它的原因: 字符串是因为您没有从接收任何值。这可能是因为您忘记了传递以前的值。 但是,您可以检查一下String 是否存在,那么将不会执行这些操作。您可以通过以下方式做到这一点: 因
问题内容: 我正在尝试在RecyclerView中实施滑动删除操作。除了在要刷卡的项目下方绘制一个删除图标外,其他一切似乎都工作正常。 这就是我的做法: 它在扔 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法’boolean android.graphics.Bitmap.isRecycled()’ 全栈跟踪 第149行已调试,但我看到它为null,但
问题内容: 我的Android项目中总是出现错误。 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ android.view.View android.app.Activity.findViewById(int)” 在我的MainActivity中,我正在调用FragmentStart类。 FragmentStart.class 问题答案: 除了@S
问题内容: 我收到以下错误 尝试在空对象引用上调用虚拟方法’void android.widget.StackView.setAdapter(android.widget.Adapter)’ 在这条线上 完整的片段 EventsFragment.java 是 Stack_Adapter.java Stack_Items 问题答案: 您正在执行: 你是。返回。 你为什么用? 在哪里?您应该从正确的x