代码之家  ›  专栏  ›  技术社区  ›  Ronak Joshi

从android中的另一个活动获取图像时出现空指针异常

  •  1
  • Ronak Joshi  · 技术社区  · 10 年前

    我在android中创建了自定义列表视图。我希望每当列表视图单击事件被调用时,它会进入另一个活动,并且该列表上的数据将显示在新活动上。下面的代码是我的LikeMainActivity(这里称为ListofWorkers),它也有Layout文件。

    package com.example.dispatchmedemo;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.view.Menu;
    
    import java.util.ArrayList;
    import java.util.List;
    import android.view.Gravity;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.Button;
    import android.widget.ListView;
    import android.widget.Toast;
    import com.example.dispatchmedemo.CustomListViewAdapter;
    import com.example.dispatchmedemo.RowItem;
    
    public class ListofWorkers extends Activity {
    
        public static final String[] name = new String[] { "ABC",
                "YZA", "ASDSA", "ASD", "ASD", "SDFS" };
    
        public static final String[] landmarks = new String[] {
                "AFDDF",
                "ADF", "ADFD",
                "ADFAD", "ADFADF", "ADFAD" };
    
        public static final String[] rates = new String[] {
            "100",
            "500", "300",
            "400", "120", "600" };
    
        public static final Integer[] images = { R.drawable.ic_launcher,
                R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher };
    
        ListView listView;
        List<RowItem> rowItems;
        Button responseSubmit;
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_listof_workers);
    
            rowItems = new ArrayList<RowItem>();
            for (int i = 0; i < name.length; i++) {
                RowItem item = new RowItem(images[i], name[i], landmarks[i], rates[i]);
                rowItems.add(item);
            }
    
            listView = (ListView) findViewById(R.id.list);
            CustomListViewAdapter adapter = new CustomListViewAdapter(this,
                    R.layout.list_single, rowItems);
            listView.setAdapter(adapter);
    
    
            listView.setOnItemClickListener(new OnItemClickListener() {
    
                @Override
                public void onItemClick(AdapterView<?> parent, 
                        View view,int position, long id) {
    
                    Intent i = new Intent(ListofWorkers.this, WorkerProfile.class);
    
                    i.putExtra("name", name);
    
                    i.putExtra("landmarks", landmarks);
    
                    i.putExtra("rates", rates);
    
                    i.putExtra("image", images);
    
                    i.putExtra("position", position);
    
                    startActivity(i);
                  }
    
            });
        }
        }
    

    现在这是我的另一个活动“WorkerProfile”,在那里我得到了名称、地标和费率,但仅在图像中,我得到了空指针异常,这是我在TOAST中输入的。

    package com.example.dispatchmedemo;
    
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class WorkerProfile extends Activity {
        // Declare Variables
        TextView txtname;
        TextView txtlandmark;
        TextView txtrate;
        ImageView imgpro;
        String[] name;
        String[] landmarks;
        String[] rate;
        int[] images;
        int position;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_worker_profile);
    
            Intent i = getIntent();
    
            position = i.getExtras().getInt("position");
    
            name = i.getStringArrayExtra("name");
    
            landmarks = i.getStringArrayExtra("landmarks");
    
            rate = i.getStringArrayExtra("rates");
    
            images  = i.getIntArrayExtra("image");
    
    
            txtname = (TextView) findViewById(R.id.textView1);
            txtlandmark = (TextView) findViewById(R.id.textView2);
            txtrate = (TextView) findViewById(R.id.textView3);
    
            imgpro = (ImageView)findViewById(R.id.ActivityWorkerProflePic);
    
    
            txtname.setText(name[position]);
            txtlandmark.setText(landmarks[position]);
            txtrate.setText(rate[position]);
    
            imgpro.setImageResource(images[position]);
           }
    }
    
    3 回复  |  直到 10 年前
        1
  •  1
  •   Ravi Bhayani    10 年前

    在这里,您将整数作为由定义的对象传递 整数 它是一个包装类。

    在receiver活动中,您将其作为基元类型的数组进行检索( 整数 ). 这就是为什么会出现Null指针异常。

    请更改以下代码,

    public static final Integer[] images = { R.drawable.ic_launcher,
                R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher };
    

    public static final int[] images = { R.drawable.ic_launcher,
                R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher };
    

    希望这会有所帮助。

        2
  •  0
  •   Krupa Patel Genish Parvadia    10 年前

    尝试以下操作:

    Bundle bundel = new Bundle();
    bundel.putIntArray("image",images);
    
    Intent intent = new Intent(this,next.class)
    intent.putExtras(bundel);
    startActivity(intent);
    

    在nect.class中使用如下:

    Integer img[] = getIntent().getExtras().getIntArray("image"); 
    
        3
  •  0
  •   Hariharan    10 年前

    试试这个。。

    在发送意图中将图像数组设置为IntegerArrayList

    i.putIntegerArrayListExtra("image", new ArrayList<Integer>(Arrays.asList(images)))
    

    然后像

    ArrayList<Integer> images  = i.getIntegerArrayListExtra("image");
    

    像这样使用

    imgpro.setImageResource(images.get(position));