为什么我在这里得到NullPointerException?

时间:2016-06-29 23:10:31

标签: android

我的代码定义如下。有两项重要活动。 Activity(1)显示了ViewFlipper中的一些图像。它使用方法直接加载所需的图像。 onOptionsItemSelected()方法从链接的XML布局R.layout.browse中定义的菜单中提取数据。另一种方法displaySelectedFlag()获取从不同活动传递的标记参数,让我们将其称为活动(2)。

活动(1):

public class BrowserActivity extends AppCompatActivity implements SimpleGestureListener, View.OnClickListener {

public ViewFlipper vFlipper;

(...)

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

setContentView(R.layout.browse);
vFlipper = (ViewFlipper) findViewById(R.id.viewFlipperBrowser);

(...)

}  // onCreate() ends here

// this method below works fine:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    vFlipper.setDisplayedChild(item.getOrder());
    return true;
}

// and this one doesn't:

public void displaySelectedFlag(int orderTag) {
    vFlipper.setDisplayedChild(orderTag); // crashes here
}
}

活动(2):

public class ListActivity extends Activity implements View.OnClickListener {

private BrowserActivity browserActivity = new BrowserActivity();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list);

    ImageButton imageA = (ImageButton) findViewById(R.id.img_a);
    imageA.setOnClickListener(this);

    ImageButton imageB = (ImageButton) findViewById(R.id.img_b);
    imageB.setOnClickListener(this);
}

public void displayImageInfo(View view) {
    String tagValue = (String) view.getTag();
    int tagId = Integer.parseInt(tagValue);
    Intent intent = new Intent(this, BrowserActivity.class);
    startActivity(intent);
    browserActivity.displaySelectedImage(imageId);
}

@Override
public void onClick(View view) {
    displayImageInfo(view);
}
}

在我检查时,在activity(2)中调用的方法onClick()获取ImageButton的ID并将其传递给activity(1)。不幸的是,我在调用ViewFlipper时得到一个NullPointerException(该行标记在上面的代码中,activity(1))。

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

您无法从其他活动引用一个活动。您必须通过调用“startActivity”让Android OS创建Activity对象。将局部变量分配为Activity的实例实际上并不意味着任何事情(例如您对BrowserActivity的实例化)。 Apoorv的评论链接到关于这个主题的一篇体面的文章。

如果要将数据从一个Activity传递到另一个Activity,则需要在Intent的bundle中传递额外内容。这篇文章详细介绍:https://stackoverflow.com/a/819427/504252