'java.lang.String[] android.os.Bundle.getStringArray(java.lang.String)'



我正试图从挂起的活动中将已检查的listview项提取到allowed_toactivity。这是我的代码:

挂起.java

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SparseBooleanArray checked = listView.getCheckedItemPositions();
                ArrayList<String> selectedItems = new ArrayList<String>();
                String str = null;
                for (int i = 0; i < checked.size(); i++) {
                    int position;
                    position = checked.keyAt(i);
                    if (checked.valueAt(i))
                        selectedItems.add(String.valueOf(arrayAdapter.getItem(position)));
                    str = listView.getItemAtPosition(i).toString();
                    if(ContextCompat.checkSelfPermission(getApplicationContext(),Manifest.permission.SEND_SMS)
                            != PackageManager.PERMISSION_GRANTED)
                    {
                        ActivityCompat.requestPermissions(pending.this,new String[]{Manifest.permission.SEND_SMS},MY_PERMISSIONS_REQUEST_SEND_SMS );
                    }
                    else
                    {
                        SmsManager sms = SmsManager.getDefault();
                        sms.sendTextMessage(str,null,"#def",null,null);
                        Toast.makeText(getApplicationContext(), "Affirmation sent !!",
                                Toast.LENGTH_SHORT).show();
                    }
                }
                String[] StrArr = new String[selectedItems.size()];
                for (int i = 0; i < selectedItems.size(); i++) {
                    StrArr[i] = selectedItems.get(i);
                }
                Intent intent = new Intent(getApplicationContext(),
                        allowed_to.class);
                b = new Bundle();
                b.putStringArray("nibba", StrArr);
                intent.putExtras(b);
                startActivity(intent);
                arrayAdapter.remove(str);
            }
        });

allowed_to.java

public class allowed_to extends pending {
public static String[] resultArr;
public static ListView lvl;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.allowed_to);

    Bundle bundle = getIntent().getExtras();

        resultArr = bundle.getStringArray("nibba");
        lvl = (ListView) findViewById(R.id.lv);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, resultArr);
        lvl.setAdapter(adapter);
        Toast.makeText(getApplicationContext(), "Allowed successfully !!",
                Toast.LENGTH_SHORT).show();
    }

}

但每当我打开应用程序时,我都会收到这个错误,我的应用程序就会崩溃。

logcat

11-14 19:55:21.782 28136-28136/com.nevermiss.subhamdutta.nevermiss E/AndroidRuntime: FATAL EXCEPTION: main
     Process: com.nevermiss.subhamdutta.nevermiss, PID: 28136
     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nevermiss.subhamdutta.nevermiss/com.nevermiss.subhamdutta.nevermiss.allowed_to}: java.lang.NullPointerException: **Attempt to invoke virtual method 'java.lang.String[] android.os.Bundle.getStringArray(java.lang.String)' on a null object reference**
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2434)
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
         at android.app.ActivityThread.access$900(ActivityThread.java:153)
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1347)
         at android.os.Handler.dispatchMessage(Handler.java:102)
         at android.os.Looper.loop(Looper.java:148)
         at android.app.ActivityThread.main(ActivityThread.java:5451)
         at java.lang.reflect.Method.invoke(Native Method)
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

更新:我还尝试检查是否按如下方式放入if语句:

package com.nevermiss.subhamdutta.nevermiss;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import static android.R.attr.data;
public class allowed_to extends pending {
    public static String[] resultArr;
    public static ListView lvl;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.allowed_to);

        Bundle bundle = getIntent().getExtras();
        if(bundle != null) {
        resultArr = bundle.getStringArray("nibba");
        lvl = (ListView) findViewById(R.id.lv);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, resultArr);
        lvl.setAdapter(adapter);
        Toast.makeText(getApplicationContext(), "Allowed successfully !!",
        Toast.LENGTH_SHORT).show();
        }
    }
}

幸运的是,应用程序打开了,但listview完全是空的。如何查看这些listview项目?

String[] StrArr = new String[selectedItems.size()];
                for (int i = 0; i < selectedItems.size(); i++) {
                    StrArr[i] = selectedItems.get(i);
                }

我想,你的bug就在这一刻。所选项目出现问题。在将该项放入捆绑包之前,记录该项的所有值。我认为您选择的项目是空的。

您的类allowed_to扩展了pending(一个真正的活动(,也许还扩展了它的上下文。所以当你打电话

Bundle bundle = getIntent().getExtras();

您实际上正在尝试获取pending活动捆绑包。

因此,我的最佳猜测是使allowed_topending一样扩展AppCompatActivity

相关内容