简体   繁体   English

列表视图中arrayadapter的NULL POINTER EXCEPTION。 ANDROID

[英]NULL POINTER EXCEPTION for arrayadapter in listview. ANDROID

I have a main view(listview) and a second main view(edittext). 我有一个主视图(列表视图)和第二个主视图(edittext)。 I pass data from second main view backwards to first main view using startActivityforResult(). 我使用startActivityforResult()将数据从第二个主视图向后传递到第一个主视图。 I have tested it out and I recieve the string back with no problem. 我已经对其进行了测试,并且可以毫无问题地收到字符串。 However there are some problems displaying it on listview. 但是,在列表视图上显示它存在一些问题。 My listview has two xml files one for the listview layout and one for the textview row. 我的listview有两个xml文件,一个用于listview布局,另一个用于textview行。 I have no idea why I am getting a nullpointer exception. 我不知道为什么我会得到一个nullpointer异常。

03-14 22:50:33.429    9268-9268/com.example.anusha.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.anusha.app, PID: 9268
java.lang.NullPointerException
        at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:392)
        at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
        at android.widget.AbsListView.obtainView(AbsListView.java:2780)
        at android.widget.ListView.measureHeightOfChildren(ListView.java:1274)
        at android.widget.ListView.onMeasure(ListView.java:1186)
        at android.view.View.measure(View.java:17594)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5398)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1410)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
        at android.view.View.measure(View.java:17594)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5398)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at android.view.View.measure(View.java:17594)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5398)
        at android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:453)
        at android.view.View.measure(View.java:17594)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5398)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at android.view.View.measure(View.java:17594)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5398)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1410)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
        at android.view.View.measure(View.java:17594)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5398)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2588)
        at android.view.View.measure(View.java:17594)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2308)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2030)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1267)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6640)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:813)
        at android.view.Choreographer.doCallbacks(Choreographer.java:613)
        at android.view.Choreographer.doFrame(Choreographer.java:583)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:799)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:146)
        at android.app.ActivityThread.main(ActivityThread.java:5635)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
        at dalvik.system.NativeStart.main(Native Method)

Here is my first main view with my listview. 这是我的第一个主视图和列表视图。 I'm pretty sure the problem is with the arrayadapter. 我很确定问题出在arrayadapter上。 Don't know what it is though. 不知道那是什么。

 ArrayList<String> array= new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_address_list);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.activity_address_list,R.id.rowTextView, array);
    ListView listview = (ListView) findViewById(R.id.listView);
    listview.setAdapter(adapter);



}
private void Add() {
    Intent intent = new Intent(AddressList.this, SilentGeofence.class);
    startActivityForResult(intent, 2);

}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 2) {
        if (resultCode == RESULT_OK){
            String result = data.getStringExtra("result");
            array.add(result);


        }
    }
    }

Here is my second main 这是我的第二个主要

   Button add = (Button) findViewById(R.id.button);
    add.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {

            String ag = txt1.getText().toString().trim();
                txt1.setText("");
                Intent returnIntent = new Intent();
                returnIntent.putExtra("result",ag);
                setResult(RESULT_OK,returnIntent);
                finish();

public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects) 公共ArrayAdapter(上下文上下文,int资源,int textViewResourceId,T []对象)

Added in API level 1 Constructor 在API级别1构造函数中添加

Parameters context The current context. 参数context当前的上下文。 resource The resource ID for a layout file containing a layout to use when instantiating views. resource布局文件的资源ID,其中包含在实例化视图时要使用的布局。 textViewResourceId The id of the TextView within the layout resource to be populated objects The objects to represent in the ListView. textViewResourceId要填充的布局资源中TextView的ID对象ListView中表示的对象。

So you should use layout of the textview not the listview layout see here see here 所以,你应该使用的TextView的布局不ListView的布局看这里看这里

    new ArrayAdapter<>(this, R.layout.layout_name_of_the_xml_containing_textview,R.id.rowTextView, array);

You must initialise your list in onCreate() , Just after the getSupportActionBar().setDisplayHomeAsUpEnabled(true); 您必须在getSupportActionBar().setDisplayHomeAsUpEnabled(true);之后,在onCreate()初始化列表getSupportActionBar().setDisplayHomeAsUpEnabled(true);

And your ArrayAdapter<String> adapter should be a field not a local variable because, after you do array.add(result) you must also call adapter.notifyDataSetChanged() in order to refresh and populate the results in the listview 并且您的ArrayAdapter<String> adapter应该是一个字段,而不是局部变量,因为在执行array.add(result)您还必须调用adapter.notifyDataSetChanged()以便刷新并在listview中填充结果

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM