【问题标题】:Nullpointer Exception when sending string arrays through intent通过意图发送字符串数组时出现 Nullpointer 异常
【发布时间】:2014-05-14 09:13:41
【问题描述】:

因此,在我的 Android 应用中,用户登录主要活动,然后他们继续进行家庭活动并执行应用的主要功能。当用户单击注销按钮时,此活动会创建通过意图发送的字符串列表。在通过意图发送列表之前,我将列表转换为数组。然后在我的主要活动中有另一个按钮“检索数据”,它启动另一个活动,虽然它只是一个 ListView。所以我想再次输入字符串数组以检索数据,以便用户可以单击按钮并查看列表数据。 这是我从第一个发送字符串数组的地方:

btnLogout.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) 
            {
                String[] resultsArray = new String[userResults.size()];
                Intent intentLogout=new Intent(getApplicationContext(),MainActivity.class);
                intentLogout.putExtra("Results", resultsArray);
                startActivity(intentLogout);
            }
            });

这是我在主 Activity 中接收并再次发送它的方式:

Bundle extras = getIntent().getExtras();
         if(extras!=null)
         {
            results = extras.getStringArray("Results");
         }
         else
         {
             Toast.makeText(getApplicationContext(), "No data to retrieve yet", Toast.LENGTH_LONG).show();
         }

 btnRetrieveData.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) 
            {
                Intent intentRD=new Intent(getApplicationContext(),RetrieveDataActivity.class);
                intentRD.putExtra("UserResults", results);
                startActivity(intentRD);
            }
            });

这是我的retrieveDataActivity,我以前没有使用过很多Listviews,所以我不确定我是否犯了任何明显/愚蠢的错误:

public class RetrieveDataActivity extends Activity 
{
    String [] values;
    ListView listView;

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

        // Get ListView object
        listView = (ListView) findViewById(R.id.list);

        // Defined Array values to show in ListView
        Bundle extras = getIntent().getExtras();
         if(extras!=null)
         {
            values = extras.getStringArray("UserResults");
         }

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, android.R.id.text1, values);


        // Assign adapter to ListView
        listView.setAdapter(adapter); 

        // ListView Item Click Listener
        listView.setOnItemClickListener(new OnItemClickListener() {

              @Override
              public void onItemClick(AdapterView<?> parent, View view,int position, long id) 
              {

                   // ListView Clicked item index
                   int itemPosition = position;

                   // ListView Clicked item value
                   String  itemValue = (String) listView.getItemAtPosition(position);

                    // Show Alert 
                    Toast.makeText(getApplicationContext(),"Position :"+itemPosition+"  ListItem : " +itemValue , Toast.LENGTH_LONG) .show();

              }

         }); 
    }

}

最后是 logcat:

05-14 04:59:36.396: E/AndroidRuntime(28254): FATAL EXCEPTION: main
05-14 04:59:36.396: E/AndroidRuntime(28254): Process: com.gmail.Sheridjohn.letterchecker, PID: 28254
05-14 04:59:36.396: E/AndroidRuntime(28254): java.lang.NullPointerException
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.widget.AbsListView.obtainView(AbsListView.java:2263)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.widget.ListView.measureHeightOfChildren(ListView.java:1263)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.widget.ListView.onMeasure(ListView.java:1175)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.view.View.measure(View.java:16497)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.view.View.measure(View.java:16497)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.view.View.measure(View.java:16497)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.view.View.measure(View.java:16497)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.view.Choreographer.doCallbacks(Choreographer.java:574)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.view.Choreographer.doFrame(Choreographer.java:544)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.os.Handler.handleCallback(Handler.java:733)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.os.Handler.dispatchMessage(Handler.java:95)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.os.Looper.loop(Looper.java:136)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at android.app.ActivityThread.main(ActivityThread.java:5017)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at java.lang.reflect.Method.invokeNative(Native Method)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at java.lang.reflect.Method.invoke(Method.java:515)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
05-14 04:59:36.396: E/AndroidRuntime(28254):    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 检查您的arraynull
  • remain to initialize things 给你这个错误
  • 你在调试应用吗??
  • 我认为'@Sree' 是对的
  • 数组中是否填充了项目??

标签: java android arrays android-intent nullpointerexception


【解决方案1】:

好的,问题是您从 Intent 获取数组列表的位置

试试

 Intent intent = new Intent(this, MainActivity.class);
 values=extras.getStringArrayExtra("UserResults");

intent.putExtra("Arrays",values);

而不是

values = extras.getStringArray("UserResults");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    相关资源
    最近更新 更多