简体   繁体   English

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

[英]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 .我制作了MainActivityBaiHat classSecondActivity来从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.

相关问题 使用Android Studio中的Java代码将XML资源从一个活动传递到另一个活动? - Pass a XML resource from one activity to another activity using java code in Android Studio? 在Android Studio中的另一个活动中查找意图的字符串 - Find a String for an Intent in another Activity in Android Studio 从另一个活动(Android Studio)导入数据 - Importing data from another activity, Android studio 如何将数据从活动传递到Android上的另一个活动 - How to pass data from activity to another activity on Android 将数据从 Activity 传递到另一个 Activity 中的 Fragment - Pass data from Activity to Fragment in another Activity 将数据从 Activity 传递到带有 Intent 的广播接收器 - Pass data from Activity to Broadcast Receiver with Intent 是否可以使用意图将数据传递给其他活动,但不能启动该特定活动? - Is that possible to pass data to different activity using intent but not start that particular activity? 使用Intent从Activity传递变量 - Using Intent to pass variable from Activity 如何在Android Studio中将堆栈从一个活动传递到另一个活动 - How to pass a stack from one activity to another in android studio 如何将文本从一个活动传递到另一个活动(android studio) - How to pass text from one activity to another activty (android studio)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM