[英]Pass data from the main activity to another activity using intent in android studio
I have a problem when passing data from the main activity to another activity using Intents
.使用Intents
将数据从主要活动传递到另一个活动时遇到问题。
I made MainActivity
, BaiHat class
and SecondActivity
for getting data from the MainActivity
.我制作了MainActivity
、 BaiHat class
和SecondActivity
来从MainActivity
获取数据。
Open logcat, there is an error like this:打开logcat,出现这样的错误:
(java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference at com.myappnvt.truyendulieu.MainActivity$1.onItemClick(MainActivity.java:30)) MainActivity.java:30 is line " String ten_bai_hat = listView.getItemAtPosition(position).toString();" (java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference at com.myappnvt.truyendulieu.MainActivity$1.onItemClick(MainActivity.java:30) )) MainActivity.java:30 是“String ten_bai_hat = listView.getItemAtPosition(position).toString();”这一行
Here is the code:这是代码:
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;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
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 = listView.getItemAtPosition(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));
}
}
package com.myappnvt.truyendulieu;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.widget.TextView;
import java.util.ArrayList;
public class SecondActivity extends AppCompatActivity {
String bai_hat ="";
int vi_tri =0;
TextView txtlaydulieu;
ArrayList<BaiHat> baiHatArrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
txtlaydulieu = (TextView) findViewById(R.id.textViewlaydulieu);
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
baiHatArrayList = (ArrayList) bundle.getParcelableArrayList("BAIHAT");
bai_hat = baiHatArrayList.get(vi_tri).getTenBaiHat().toString();
String songName = intent.getStringExtra("TENBAIHAT");
txtlaydulieu.setText(songName);
txtlaydulieu.setSelected(true);
vi_tri = bundle.getInt("POSITION",0);
Uri uri = Uri.parse(baiHatArrayList.get(vi_tri).toString());
MediaPlayer mediaPlayer = MediaPlayer.create(getApplicationContext(), uri);
mediaPlayer.start();
}
}
can you try to get item like this.你能试着得到这样的物品吗? instead of getting the list from the adapter you can also retrieve the source like belo.除了从适配器获取列表之外,您还可以像 belo 一样检索源。 The error says nullpointer exception that means you are not getting the data from adapter.该错误表示空指针异常,这意味着您没有从适配器获取数据。 So instead try below once.所以改为尝试下面一次。
String ten_bai_hat = baiHatArrayList.get(position).toString();
Full code:完整代码:
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));
}
} }
Try to implement your BaiHatAdapter
like this:尝试像这样实现你的BaiHatAdapter
:
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";
}
}
textViewId
- id of TextView
that will display the ten_bai_hat
text. textViewId
- 将显示ten_bai_hat
文本的TextView
id。 Here you override the getItem
method to return the tenBaiHat
value.在这里,您覆盖getItem
方法以返回tenBaiHat
值。 If either the item is null or the tenBaiHat
string is null, then return some default text.如果项目为空或tenBaiHat
字符串为空,则返回一些默认文本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.