[英]Pass a XML resource from one activity to another activity using java code in Android Studio?
[英]Pass data from the main activity to another activity using intent in android studio
使用Intents
將數據從主要活動傳遞到另一個活動時遇到問題。
我制作了MainActivity
、 BaiHat class
和SecondActivity
來從MainActivity
獲取數據。
打開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 是“String ten_bai_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;
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();
}
}
你能試着得到這樣的物品嗎? 除了從適配器獲取列表之外,您還可以像 belo 一樣檢索源。 該錯誤表示空指針異常,這意味着您沒有從適配器獲取數據。 所以改為嘗試下面一次。
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));
}
}
嘗試像這樣實現你的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
- 將顯示ten_bai_hat
文本的TextView
id。 在這里,您覆蓋getItem
方法以返回tenBaiHat
值。 如果項目為空或tenBaiHat
字符串為空,則返回一些默認文本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.