Ich benutze Gson und Universal Image Loader. benutzte ich dieses Projekt wie eine Vorlage (Sie müssen Version es laufen ändern, es in Tutorial zeigt): Tutorial: https://www.youtube.com/watch?v=X2mY3zfAMfM Link zu diesem Projekt: https://github.com/hishamMuneer/JsonParsingDemoListView in der ersten Aktivität, listView in der zweiten Aktivität; verschachtelte Json- keine Bilder in der zweiten ListView.
ich Bilder in verschachtelten Teil von JSON aded und erstellt Listview in zweite Aktivität, um es anzuzeigen.
{
"movies": [
{
"movie": "Avengers",
"cast": [
{
"name": "Robert Downey Jr.",
"image": "www.mywebsite.com/img2.png"
},
{
"name": "Chris Evans",
"image": "www.mywebsite.com/img3.png"
},
{
"name": "Mark Ruffalo",
"image": "www.mywebsite.com/img4.png"
}
],
"image": "https://jsonparsingdemo-cec5b.firebaseapp.com/jsonData/images/avengers.jpg"
},
{
"movie": "Interstellar",
"cast": [
{
"name": "Robert Downey Jr.",
"image": "www.mywebsite.com/img5.png"
},
{
"name": "Chris Evans",
"image": "www.mywebsite.com/img6.png"
},
{
"name": "Mark Ruffalo",
"image": "www.mywebsite.com/img7.png"
}
],
"image": "https://jsonparsingdemo-cec5b.firebaseapp.com/jsonData/images/interstellar.jpg"
},...
]
}
Erstes listView funktioniert ordnungsgemäß. In der Sekunde habe ich Fehler. Ich habe drei Möglichkeiten ausprobiert: 1. Mit BaseAdapter: Withouth Bilder füllt zweite listView mit textView korrekt und zeigt jede Bild im Detail Aktivität. Also drei Aktivitäten funktionieren gut (ohne Bilder in der zweiten). Aber wenn ich versuche, ListView mit Bildern zu füllen, habe ich Fehler: a. Standard-Weg verwenden: Problem mit Parse-während der Fehlersuche sehe ich in der Logcat die richtige Bild-URL, und seine Position während des Debuggens, aber archivieren Sie den Fehler danach.
’FATAL EXCEPTION: main
java.lang.NumberFormatException: For input string: ”http://example.com/image14.png”
at java.lang.Integer.parseInt(Integer.java:608)
at java.lang.Integer.parseInt(Integer.java:643)
at ….ListAdapter.getView(ListActivity)
b. Verwenden von Universal Image Loader. , Versuch virtuelle Methode 'Leerer android.widget.ProgressBar.setVisibility (int)' auf einer Null-Objekt Referenz‘ Imageloader-Konfiguration mit null
werden kann nicht-
initialisiert aufzurufen
- ArrayAdapter Verwendung wie in der ersten Aktivität. Fehler: Versuch aus dem Feld 'android.widget.TextView com.example ... GridActivity $ ViewHolder.gridTitle' auf einer Null-Objekt Referenz
Können Sie mir helfen, zu lesen, bitte?
public class MovieModel {
private String name;
private String imgMovie;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImgMenu() {
return imgMovie;
}
public void setImgMenu(String imgMenu) {
this.imgMovie = imgMenu;
}
@SerializedName("description")
private List<Descriptions> descriptions;
public List<Descriptions> getDescriptionsList() {
return descriptions;
}
public void setDescriptionsList(List<Descriptions> descriptions) {
this.descriptions = descriptions;
}
public static class Descriptions {
private String title;
private String image;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
}
}
public class ListActivity extends AppCompatActivity {
private ProgressBar progresBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
ListView listView = (ListView) findViewById(R.id.listView);
// getting the model from MainActivity send via extras
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
String json = bundle.getString("movieModel");
MovieModel movieModel = new Gson().fromJson(json, MovieModel.class);
final List<MovieModel.Descriptions> result = movieModel.getDescriptionsList();
GridAdapter gridAdapter = new GridAdapter(getApplicationContext(), result);
listView.setAdapter(gridAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
MovieModel.Descriptions descriptionsModel = result.get(position);
Intent intent = new Intent(ListActivity.this, DetailActivity.class);
intent.putExtra("descriptionsModel", new Gson().toJson(descriptionsModel));
startActivity(intent);
}
});
}
}
public class GridAdapter extends BaseAdapter {
private LayoutInflater inflater;
private Context context;
private int resource;
private List<MovieModel.Descriptions> items; // You hate to use detailList
public GridAdapter(Context context, List<MovieModel.Descriptions> items) {
this.context = context;
this.items = items;
inflater = (LayoutInflater.from(context));
}
@Override
public int getCount() {
return items.size(); //returns total of items in the list
}
@Override
public Object getItem(int position) {
return items.get(position); //returns list item at the specified position
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = inflater.inflate(R.layout.list, null);
// Display text correctly when all below (with image) is comment
TextView listTitle = (TextView) convertView.findViewById(R.id.text);
listTitle.setText(items.get(position).getTitle());
// 1a -Shows error because Parse when all bellow is comment
ImageView listImg = (ImageView) convertView.findViewById(R.id.image);
listImg.setImageResource(Integer.parseInt(items.get(position).getImage()));
// 1b - ImageLoader configuration can not be initialized with null
final ProgressBar progressBar = (ProgressBar) convertView.findViewById(R.id.progressBar);
ImageLoader.getInstance().displayImage(items.get(position).getImage(), listImg , new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
progressBar.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
progressBar.setVisibility(View.GONE);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
progressBar.setVisibility(View.GONE);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
progressBar.setVisibility(View.GONE);
}
});
return convertView;
}
}
activity_list
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.xtech.baselistview.ListActivity">
<GridView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:verticalSpacing="0dp"
android:horizontalSpacing="0dp"
android:stretchMode="columnWidth"
android:numColumns="2"
/>
</RelativeLayout>
list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="centerCrop" />
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
</FrameLayout>
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="center" />
</LinearLayout>
Dritter Weg mit ArrayAdapter
public class ListActivity extends AppCompatActivity {
private ProgressBar progresBar;
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
listView = (ListView) findViewById(R.id.listView);
// getting the model from MainActivity send via extras
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
String json = bundle.getString("movieModel");
MovieModel movieModel = new Gson().fromJson(json, MovieModel.class);
List<MovieModel.Descriptions> result = movieModel.getDescriptionsList();
ListAdapter adapter = new ListAdapter(getApplicationContext(), R.layout.list, result);
listView.setAdapter(adapter);
}
}
public class ListAdapter extends ArrayAdapter {
private LayoutInflater inflater;
private Context context;
private int resource;
private List<MovieModel.Descriptions> items;
public ListAdapter(Context context, int resource, List<MovieModel.Descriptions> items) {
super(context, resource, items);
this.context = context;
this.resource = resource;
this.items = items;
inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return items.size(); //returns total of items in the list
}
@Override
public Object getItem(int position) {
return items.get(position); //returns list item at the specified position
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(resource, null);
holder.listImg = (ImageView) convertView.findViewById(R.id.image);
holder.listTitle = (TextView) convertView.findViewById(R.id.text);
} else {
holder = (ViewHolder) convertView.getTag();
}
final ProgressBar progressBar = (ProgressBar)convertView.findViewById(R.id.progressBar);
final ViewHolder finalHolder = holder;
ImageLoader.getInstance().displayImage(items.get(position).getImage(), holder.listImg, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
progresBar.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
progresBar.setVisibility(View.GONE);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
progresBar.setVisibility(View.GONE);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
progresBar.setVisibility(View.GONE);
}
});
holder.listTitle.setText(items.get(position).getTitle()); //
return convertView;
}
}
class ViewHolder {
private ImageView listImg;
private TextView listTitle;
}
}
Unklar ... NumberFormatException ODER NullPointerException ?! Versuchen Sie nicht, mehrere Fragen in einem zu stellen! –
Ich habe versucht, beide Konfigurationen mit BaseAdapter und ArrayAdapter hinzuzufügen. Ich habe Angst, wenn ich die gleiche Frage für ArrayAdapter und BaseAdapter hinzufügen wird einer von ihnen entfernt werden. Also der Fehler bei der Verwendung von ArrayAdapter ist: Fehler: Versuch, aus Feld zu lesen 'android.widget.TextView com.example ... GridActivity $ ViewHolder.gridTitle' auf eine Null-Objekt-Referenz – Maler