Java 在android studio中使用intent将数据从主活动传递到另一个活动

Java 在android studio中使用intent将数据从主活动传递到另一个活动,java,android,arraylist,android-intent,parcelable,Java,Android,Arraylist,Android Intent,Parcelable,我在使用意图将数据从主活动传递到另一个活动时遇到问题 我制作了main活动,BaiHat类和SecondActivity,用于从main活动获取数据 打开logcat,出现如下错误: public class BaiHatAdapter extends ArrayAdapter { public BaiHatAdapter(@NonNull Context context, int layout, int textViewId, @NonNull List<BaiHat> o

我在使用
意图将数据从主活动传递到另一个活动时遇到问题
我制作了
main活动
BaiHat类
SecondActivity
,用于从
main活动
获取数据

打开logcat,出现如下错误:

public class BaiHatAdapter extends ArrayAdapter {
    public BaiHatAdapter(@NonNull Context context, int layout, int textViewId, @NonNull List<BaiHat> objects) {
        super(context, layout, textViewId, objects);
    }

    @Nullable
    @Override
    public Object getItem(int position) {
        BaiHat item = (BaiHat) super.getItem(position);
        return (item != null && item.getTenBaiHat() != null) ? item.getTenBaiHat() : "Default TenBaiHat Text";
    }
}
(java.lang.NullPointerException:尝试调用虚拟方法 空对象上的“java.lang.String java.lang.Object.toString()” 参考 位于com.myappnvt.truyendulieu.MainActivity$1.onItemClick(MainActivity.java:30)) MainActivity.java:30是行“String ten\u bai\u hat=listView.getItemAtPosition(position).toString()”

代码如下:

 package com.myappnvt.truyendulieu;

import android.os.Parcel;
import android.os.Parcelable;

import java.lang.reflect.Array;

public class BaiHat implements Parcelable {
    private String tenBaiHat;
    private int tenFile;

    public BaiHat(String tenBaiHat, int tenFile) {
        this.tenBaiHat = tenBaiHat;
        this.tenFile = tenFile;
    }

    public BaiHat(Parcel in) {
        tenBaiHat = in.readString();
        tenFile = in.readInt();
    }

    public static final Creator<BaiHat> CREATOR = new Creator<BaiHat>() {
        @Override
        public BaiHat createFromParcel(Parcel in) {
            return new BaiHat(in);
        }

        @Override
        public BaiHat[] newArray(int size) {
            return new BaiHat[size];
        }
    };

    public String getTenBaiHat() {
        return tenBaiHat;
    }

    public void setTenBaiHat(String tenBaiHat) {
        this.tenBaiHat = tenBaiHat;
    }

    public int getTenFile() {
        return tenFile;
    }

    public void setTenFile(int tenFile) {
        this.tenFile = tenFile;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(tenBaiHat);
        dest.writeInt(tenFile);

    }
    public  static final Parcelable.Creator<BaiHat> creator = new Parcelable.Creator<BaiHat>(){
        public BaiHat createFromParcel(Parcel in){
            return new BaiHat(in);
        }
        public BaiHat[] newArray (int size){
            return  new BaiHat[size];
        }
    };
}
package com.myappnvt.truyendulieu;
导入android.os.packet;
导入android.os.Parcelable;
导入java.lang.reflect.Array;
公共类BaiHat实现可包裹{
私人字符串tenBaiHat;
私人文件;
public-BaiHat(字符串tenBaiHat,int-tenFile){
this.tenBaiHat=tenBaiHat;
this.tenFile=tenFile;
}
公共礼帽(包裹内){
tenBaiHat=in.readString();
tenFile=in.readInt();
}
公共静态最终创建者=新创建者(){
@凌驾
公共BaiHat createFromParcel(地块中){
返回新的BaiHat(英寸);
}
@凌驾
public BaiHat[]新数组(整数大小){
返回新的BaiHat[尺寸];
}
};
公共字符串getTenBaiHat(){
返回tenBaiHat;
}
公共无效setTenBaiHat(字符串tenBaiHat){
this.tenBaiHat=tenBaiHat;
}
公共int getTenFile(){
返回文件;
}
公共无效设置文件(int-tenFile){
this.tenFile=tenFile;
}
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
目的地书面记录(tenBaiHat);
目标写入(十文件);
}
public static final Parcelable.Creator=新建Parcelable.Creator(){
公共BaiHat createFromParcel(地块中){
返回新的BaiHat(英寸);
}
public BaiHat[]新数组(整数大小){
返回新的BaiHat[尺寸];
}
};
}
package com.myappnvt.truyendulieu;
导入androidx.appcompat.app.appcompat活动;
导入android.content.Intent;
导入android.os.Bundle;
导入android.os.Parcelable;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ListView;
导入java.util.ArrayList;
导入java.util.List;
公共类MainActivity扩展了AppCompatActivity{
白帽适配器;
列表视图列表视图;
ArrayList baiHatArrayList;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Addlist();
适配器=新的BaiHatAdapter(MainActivity.this,R.layout.dong_bai_hat,baiHatArrayList);
setAdapter(适配器);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
字符串ten_bai_hat=listView.getItemAtPosition(position.toString();
startActivity(新意图(getApplicationContext(),SecondActivity.class)
.putExtra(“BAIHAT”,baiHatArrayList)
.putExtra(“TENBAIHAT”,ten_bai_hat)
.putExtra(“位置”,位置));
}
});
}
私有void Addlist(){
listView=(listView)findViewById(R.id.listViewdanhsach);
baiHatArrayList=新的ArrayList();
baiHatArrayList.add(新的BaiHat(“Bến tơng tư-Quang Linh“,R.raw.benưtuongưu tuưQuangưLinh));
BaiHatarayList.添加(新的BaiHat(“Buồn trong kỷ 镍ệm-an Nguyèn”,R.raw.buon_trong_ky_niem_dan_nguyen);
BaihatarayList.添加(新的BaiHat(“Cát bụi cuộcđời-Phi-Nhung“,R.raw.cat_bui_cuoc_doi_Phi_-Nhung));
BaihatarayList.添加(新的BaiHat(“Cho vừ一个lòng em-NhưNguyệt“,R.raw.cho_vua_long_em_nhu_nguyet);
baiHatArrayList.add(新的BaiHat(“Chuy”)ếnđkhòong em-Tuấn Vũ,R.raw.chuyen_do_khong_em_tuan_vu);
}
}
package com.myappnvt.truyendulieu;
导入androidx.appcompat.app.appcompat活动;
导入android.content.Intent;
导入android.media.MediaPlayer;
导入android.net.Uri;
导入android.os.Bundle;
导入android.widget.TextView;
导入java.util.ArrayList;
公共类SecondActivity扩展了AppCompatActivity{
字符串bai_hat=“”;
int vi_tri=0;
TextView txtlaydulieu;
ArrayList baiHatArrayList;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_秒);
txtlaydulieu=(TextView)findViewById(R.id.textViewlaydulieu);
Intent=getIntent();
Bundle=intent.getExtras();
baiHatArrayList=(ArrayList)bundle.getParcelableArrayList(“BAIHAT”);
bai_hat=baiHatArrayList.get(vi_tri.getTenBaiHat().toString();
String songName=intent.getStringExtra(“TENBAIHAT”);
txtlaydulieu.setText(歌曲名);
txtlaydulieu.setSelected(true);
vi_tri=bundle.getInt(“位置”,0);
Uri=Uri.parse(baiHatArrayList.get(vi_tri.toString());
MediaPlayer=MediaPlayer.create(getApplicationContext(),uri);
mediaPlayer.start();
}
}

你能试着得到这样的物品吗。除了从适配器获取列表之外,您还可以像belo一样检索源代码。该错误表示nullpointer异常,这意味着您没有从适配器获取数据。因此,请尝试下面的一次

String ten_bai_hat = baiHatArrayList.get(position).toString();
完整代码:

public class MainActivity extends AppCompatActivity {
BaiHatAdapter adapter;
ListView listView;
ArrayList<BaiHat> baiHatArrayList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Addlist();
    adapter = new BaiHatAdapter(MainActivity.this, R.layout.dong_bai_hat, baiHatArrayList);
    listView.setAdapter(adapter);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String ten_bai_hat = baiHatArrayList.get(position).toString();
            startActivity(new Intent(getApplicationContext(),SecondActivity.class)
                    .putExtra("BAIHAT", baiHatArrayList)
            .putExtra("TENBAIHAT", ten_bai_hat)
            .putExtra("POSITION",position));
        }
    });


}
private void Addlist(){
    listView = (ListView) findViewById(R.id.listViewdanhsach);
    baiHatArrayList = new ArrayList<>();
    baiHatArrayList.add(new BaiHat("Bến tương tư - Quang Linh", R.raw.ben_tuong_tu_quang_linh));
    baiHatArrayList.add(new BaiHat("Buồn trong kỷ niệm - Đan Nguyên", R.raw.buon_trong_ky_niem_dan_nguyen));
    baiHatArrayList.add(new BaiHat("Cát bụi cuộc đời - Phi Nhung", R.raw.cat_bui_cuoc_doi_phi_nhung));
    baiHatArrayList.add(new BaiHat("Cho vừa lòng em - Như Nguyệt", R.raw.cho_vua_long_em_nhu_nguyet));
    baiHatArrayList.add(new BaiHat("Chuyến đò không em - Tuấn Vũ", R.raw.chuyen_do_khong_em_tuan_vu));

}
public class main活动扩展了AppCompa
public class MainActivity extends AppCompatActivity {
BaiHatAdapter adapter;
ListView listView;
ArrayList<BaiHat> baiHatArrayList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Addlist();
    adapter = new BaiHatAdapter(MainActivity.this, R.layout.dong_bai_hat, baiHatArrayList);
    listView.setAdapter(adapter);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String ten_bai_hat = baiHatArrayList.get(position).toString();
            startActivity(new Intent(getApplicationContext(),SecondActivity.class)
                    .putExtra("BAIHAT", baiHatArrayList)
            .putExtra("TENBAIHAT", ten_bai_hat)
            .putExtra("POSITION",position));
        }
    });


}
private void Addlist(){
    listView = (ListView) findViewById(R.id.listViewdanhsach);
    baiHatArrayList = new ArrayList<>();
    baiHatArrayList.add(new BaiHat("Bến tương tư - Quang Linh", R.raw.ben_tuong_tu_quang_linh));
    baiHatArrayList.add(new BaiHat("Buồn trong kỷ niệm - Đan Nguyên", R.raw.buon_trong_ky_niem_dan_nguyen));
    baiHatArrayList.add(new BaiHat("Cát bụi cuộc đời - Phi Nhung", R.raw.cat_bui_cuoc_doi_phi_nhung));
    baiHatArrayList.add(new BaiHat("Cho vừa lòng em - Như Nguyệt", R.raw.cho_vua_long_em_nhu_nguyet));
    baiHatArrayList.add(new BaiHat("Chuyến đò không em - Tuấn Vũ", R.raw.chuyen_do_khong_em_tuan_vu));

}
public class BaiHatAdapter extends ArrayAdapter {
    public BaiHatAdapter(@NonNull Context context, int layout, int textViewId, @NonNull List<BaiHat> objects) {
        super(context, layout, textViewId, objects);
    }

    @Nullable
    @Override
    public Object getItem(int position) {
        BaiHat item = (BaiHat) super.getItem(position);
        return (item != null && item.getTenBaiHat() != null) ? item.getTenBaiHat() : "Default TenBaiHat Text";
    }
}