我的Android Studio出现问题,我想通过包裹传递数据,但是如果我单击列表视图时始终关闭,无法解决此消息,怎么解决?
错误
package com.example.moviee;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
public class MovieDetail extends AppCompatActivity {
String txt_name;
String txt_deskripsi;
int foto;
public static final String EXTRA_MOVIE = "text_extra_movie";
TextView tvName, txt_detail;
ImageView imgposter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_movie_detail);
tvName = findViewById(R.id.text_ph);
txt_detail = findViewById(R.id.txt_deksrip);
imgposter = findViewById(R.id.img_poster);
ArrayList<Film> film = new ArrayList<>();
film = this.getIntent().getParcelableArrayListExtra(EXTRA_MOVIE);
txt_name = film.get(0).getNama();
tvName.setText(txt_name);
txt_deskripsi = film.get(0).getDeskripsi();
txt_detail.setText(txt_deskripsi);
foto = film.get(0).getFilm();
imgposter.setImageResource(foto);
}
}
movieDetail.java
package com.example.moviee;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private FilmAdapter adapter;
private String[] dataNama;
private String[] dataDeskrip;
private TypedArray dataPhoto;
private ArrayList<Film> filmed;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
adapter = new FilmAdapter(this);
ListView listView = findViewById(R.id.lv_list);
listView.setAdapter(adapter);
prepare();
addItem();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent = new Intent(MainActivity.this, MovieDetail.class);
ArrayList<Film> movies = new ArrayList<Film>();
Film movie = new Film();
movie.setFilm(dataPhoto.getResourceId(i, -1));
movie.setNama(dataNama[i]);
movie.setDeskripsi(dataDeskrip[i]);
movies.add(movie);
intent.putParcelableArrayListExtra(MovieDetail.EXTRA_MOVIE, movies);
startActivity(intent);
}
});
}
@Override
public void onClick(View v) {
}
private void addItem(){
ArrayList<Film> films = new ArrayList<>();
for (int i = 0; i < dataNama.length; i++){
Film film = new Film();
film.setFilm(dataPhoto.getResourceId(i, -1));
film.setNama(dataNama[i]);
film.setDeskripsi(dataDeskrip[i]);
films.add(film);
}
adapter.setFilms(films);
}
private void prepare(){
dataNama = getResources().getStringArray(R.array.data_film);
dataDeskrip = getResources().getStringArray(R.array.data_deskripsi);
dataPhoto = getResources().obtainTypedArray(R.array.data_foto);
}
}
mainactivity.java
您需要首先初始化ArrayList<>
。
ArrayList<Film> film = new ArrayList<>();
film = this.getIntent().getParcelableArrayListExtra(EXTRA_MOVIE);
然后您可以访问它的值
txt_name = film.get(0).getName();
tvName.setText(txt_name);
2020-01-19 00:12:47.324 3480-3480 / com.example.moviee E / AndroidRuntime:FATAL EXCEPTION:main流程:com.example.moviee,PID:3480java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.moviee / com.example.moviee.MovieDetail}:java.lang.NullPointerException:尝试调用虚拟方法'void android.widget.TextView.setText(java。 lang.CharSequence)'引用为空对象在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)在android.app.ActivityThread.-wrap11(未知来源:0)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1593)在android.os.Handler.dispatchMessage(Handler.java:105)在android.os.Looper.loop(Looper.java:164)在android.app.ActivityThread.main(ActivityThread.java:6541)在java.lang.reflect.Method.invoke(本机方法)在com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void android.widget.TextView.setText(java.lang.CharSequence)'在com.example.moviee.MovieDetail.onCreate(MovieDetail.java:34)在android.app.Activity.performCreate(Activity.java:6975)在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)在android.app.ActivityThread.-wrap11(未知来源:0)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1593)在android.os.Handler.dispatchMessage(Handler.java:105)在android.os.Looper.loop(Looper.java:164)在android.app.ActivityThread.main(ActivityThread.java:6541)在java.lang.reflect.Method.invoke(本机方法)在com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)。
完整日志
2020-01-19 00:12:47.324 3480-3480 / com.example.moviee E / AndroidRuntime:FATAL EXCEPTION:main流程:com.example.moviee,PID:3480java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.moviee / com.example.moviee.MovieDetail}:java.lang.NullPointerException:尝试调用虚拟方法'void android.widget.TextView.setText(java。 lang.CharSequence)'引用为空对象在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)在android.app.ActivityThread.-wrap11(未知来源:0)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1593)在android.os.Handler.dispatchMessage(Handler.java:105)在android.os.Looper.loop(Looper.java:164)在android.app.ActivityThread.main(ActivityThread.java:6541)在java.lang.reflect.Method.invoke(本机方法)在com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void android.widget.TextView.setText(java.lang.CharSequence)'在com.example.moviee.MovieDetail.onCreate(MovieDetail.java:34)在android.app.Activity.performCreate(Activity.java:6975)在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)在android.app.ActivityThread.-wrap11(未知来源:0)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1593)在android.os.Handler.dispatchMessage(Handler.java:105)在android.os.Looper.loop(Looper.java:164)在android.app.ActivityThread.main(ActivityThread.java:6541)在java.lang.reflect.Method.invoke(本机方法)在com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)。
完整日志