2016-10-13 6 views
-1

enter image description hereは、JSONファイルから画像やデータをフェッチしようとすると、リストビューに表示する必要が

{ 
    "movies": [ 
    { 
     "movie": "Avengers", 
     "year": 2012, 
     "rating": 7.8, 
     "duration": "141 min", 
     "director": "Joss Whedon", 
     "tagline": "A new age begins", 
     "cast": [ 
     { 
      "name": "Robert Downey Jr." 
     }, 
     { 
      "name": "Chris Evans" 
     }, 
     { 
      "name": "Mark Ruffalo" 
     } 
     ], 
     "image": "http://jsonparsing.parseapp.com/jsonData/images/avengers.jpg", 
     "story": "When Tony Stark and Bruce Banner try to jump-start a dormant peacekeeping program called Ultron, things go horribly wrong and it's up to Earth's Mightiest Heroes to stop the villainous Ultron from enacting his terrible plans." 
    }, 
    { 
     "movie": "Interstellar", 
     "year": 2014, 
     "rating": 8.7, 
     "duration": "169 min", 
     "director": "Christopher Nolan", 
     "tagline": "Mankind was born on Earth. It was never meant to die here.", 
     "cast": [ 
     { 
      "name": "Matthew McConaughey" 
     }, 
     { 
      "name": "Anne Hathaway" 
     }, 
     { 
      "name": "Jessica Chastain" 
     }, 
     { 
      "name": "Wes Bentley" 
     } 
     ], 
     "image": "http://jsonparsing.parseapp.com/jsonData/images/interstellar.jpg", 
     "story": "A team of explorers travel through a wormhole in space in an attempt to ensure humanity's survival." 
    }, 
    { 
     "movie": "Fantastic Four", 
     "year": 2015, 
     "rating": 4.0, 
     "duration": "100 min", 
     "director": "Josh Trank", 
     "tagline": "Change is coming.", 
     "cast": [ 
     { 
      "name": "Miles Teller" 
     }, 
     { 
      "name": "Kate Mara" 
     }, 
     { 
      "name": "Michael B. Jordan" 
     } 
     ], 
     "image": "http://jsonparsing.parseapp.com/jsonData/images/four.jpg", 
     "story": "Four young outsiders teleport to an alternate and dangerous universe which alters their physical form in shocking ways. The four must learn to harness their new abilities and work together to save Earth from a former friend turned enemy." 
    }, 
    { 
     "movie": "The Dark Knight", 
     "year": 2008, 
     "rating": 9.0, 
     "duration": "152 min", 
     "director": "Christopher Nolan", 
     "tagline": "Why So Serious?", 
     "cast": [ 
     { 
      "name": "Christian Bale" 
     }, 
     { 
      "name": "Heath Ledger" 
     }, 
     { 
      "name": "Aaron Eckhart" 
     } 
     ], 
     "image": "http://jsonparsing.parseapp.com/jsonData/images/batman.jpg", 
     "story": "When the menace known as the Joker wreaks havoc and chaos on the people of Gotham, the caped crusader must come to terms with one of the greatest psychological tests of his ability to fight injustice." 
    }, 
    { 
     "movie": "The Lord of the Rings: The Return of the King", 
     "year": 2003, 
     "rating": 8.9, 
     "duration": "201 min", 
     "director": "Peter Jackson", 
     "tagline": "This Christmas the journey ends.", 
     "cast": [ 
     { 
      "name": "Viggo Mortensen" 
     }, 
     { 
      "name": "Ian McKellen" 
     }, 
     { 
      "name": "Elijah Wood" 
     } 
     ], 
     "image": "http://jsonparsing.parseapp.com/jsonData/images/rings.jpg", 
     "story": "Gandalf and Aragorn lead the World of Men against Sauron's army to draw his gaze from Frodo and Sam as they approach Mount Doom with the One Ring." 
    }, 
    { 
     "movie": "Life Is Beautiful", 
     "year": 1997, 
     "rating": 8.6, 
     "duration": "116 min", 
     "director": "Roberto Benigni", 
     "tagline": "An unforgettable fable that proves love, family and imagination conquer all.", 
     "cast": [ 
     { 
      "name": "Roberto Benigni" 
     }, 
     { 
      "name": "Nicoletta Braschi" 
     }, 
     { 
      "name": "Giorgio Cantarini" 
     } 
     ], 
     "image": "http://jsonparsing.parseapp.com/jsonData/images/life.jpg", 
     "story": "When an open-minded Jewish librarian and his son become victims of the Holocaust, he uses a perfect mixture of will, humor and imagination to protect his son from the dangers around their camp." 
    }, 
    { 
     "movie": "Gladiator", 
     "year": 2000, 
     "rating": 8.5, 
     "duration": "155 min", 
     "director": "Ridley Scott", 
     "tagline": "Father of a murdered son, husband to a murdered wife and I shall have my vengeance in this life or the next", 
     "cast": [ 
     { 
      "name": "Russell Crowe" 
     }, 
     { 
      "name": "Joaquin Phoenix" 
     }, 
     { 
      "name": "Connie Nielsen" 
     }, 
     { 
      "name": "Oliver Reed" 
     }, 
     { 
      "name": "Tommy Flanagan" 
     } 
     ], 
     "image": "http://jsonparsing.parseapp.com/jsonData/images/gladiator.jpg", 
     "story": "When a Roman general is betrayed and his family murdered by an emperor's corrupt son, he comes to Rome as a gladiator to seek revenge." 
    }, 
    { 
     "movie": "The Lion King", 
     "year": 1994, 
     "rating": 8.5, 
     "duration": "89 min", 
     "director": "Roger Allers", 
     "tagline": "The King Has Returned.", 
     "cast": [ 
     { 
      "name": "James Earl Jones" 
     }, 
     { 
      "name": "Jeremy Irons" 
     }, 
     { 
      "name": "Matthew Broderick" 
     } 
     ], 
     "image": "http://jsonparsing.parseapp.com/jsonData/images/lionking.jpg", 
     "story": "Lion cub and future king Simba searches for his identity. His eagerness to please others and penchant for testing his boundaries sometimes gets him into trouble." 
    }, 
    { 
     "movie": "WALL-E", 
     "year": 2008, 
     "rating": 8.4, 
     "duration": "98 min", 
     "director": "Andrew Stanton", 
     "tagline": "He's got a lot of time on his hands.", 
     "cast": [ 
     { 
      "name": "Ben Burtt" 
     }, 
     { 
      "name": "Elissa Knight" 
     }, 
     { 
      "name": "Jeff Garlin" 
     } 
     ], 
     "image": "http://jsonparsing.parseapp.com/jsonData/images/walle.jpg", 
     "story": "In the distant future, a small waste collecting robot inadvertently embarks on a space journey that will ultimately decide the fate of mankind." 
    }, 
    { 
     "movie": "Saving Private Ryan", 
     "year": 1998, 
     "rating": 8.6, 
     "duration": "169 min", 
     "director": "Steven Spielberg", 
     "tagline": "There was only one man left in the family, and the mission was to save him", 
     "cast": [ 
     { 
      "name": "Tom Hanks" 
     }, 
     { 
      "name": "Matt Damon" 
     } 
     ], 
     "image": "http://jsonparsing.parseapp.com/jsonData/images/ryan.jpg", 
     "story": "Following the Normandy Landings, a group of U.S. soldiers go behind enemy lines to retrieve a paratrooper whose brothers have been killed in action." 
    } 
    ] 
} 

enter image description here

@Override 
     protected void onPostExecute(List<MovieModel> result) { 
      super.onPostExecute(result); 
      MovieAdapter Adapter=new MovieAdapter(getContext(),R.layout.row,result); 
      lvmovies.setAdapter(Adapter); 

     } 

この私の全体のコード:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="maxwell.jsonsample.SecondFragment"> 


    <Button 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="ok" 
     android:id="@+id/ok" 
     android:layout_gravity="center_horizontal" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" /> 

    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="437dp" 
     android:id="@+id/lvmovies" 
     android:layout_below="@+id/ok" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentBottom="true" /> 
</RelativeLayout> 




<?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" 
    android:padding="4dp"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 

    <FrameLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 


    </FrameLayout> 

    <ImageView 
     android:layout_width="120dp" 
     android:layout_height="160dp" 
     android:id="@+id/movieicon" 
     android:src="@mipmap/ic_launcher" /> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:text="Movie Name" 
      android:id="@+id/tvmovie" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:text="Tagline" 
      android:id="@+id/tvtagline" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:text="year" 
      android:id="@+id/tvyear" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:text="duration" 
      android:id="@+id/tvduration" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:text="dirctor" 
      android:id="@+id/tvdirector" /> 
    </LinearLayout> 
    </LinearLayout> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <RatingBar 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:id="@+id/ratingBar" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:text="Cast" 
      android:id="@+id/tvcast" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:text="Story" 
      android:id="@+id/tvstory" /> 
    </LinearLayout> 

</LinearLayout> 



package maxwell.jsonsample; 


import android.content.Context; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.RatingBar; 
import android.widget.TextView; 

import com.nostra13.universalimageloader.core.DisplayImageOptions; 
import com.nostra13.universalimageloader.core.ImageLoader; 
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.List; 

import maxwell.jsonsample.model.MovieModel; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class SecondFragment extends Fragment { 

    TextView tv; 
    private TextView viwejson; 
    HttpURLConnection connection; 
    BufferedReader reader; 
    InputStream stream; 
    Button ok; 
    private ListView lvmovies; 

    public SecondFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_second, container, false); 

     DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder() 

     .cacheInMemory(true) 
       .cacheOnDisk(true) 

     .build(); 
     ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getActivity()) 
     .defaultDisplayImageOptions(defaultOptions) 

     .build(); 
     ImageLoader.getInstance().init(config); 

     lvmovies=(ListView)view.findViewById(R.id.lvmovies); 
     ok=(Button)view.findViewById(R.id.ok); 

     ok.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       new JsonTask().execute("http://jsonparsing.parseapp.com/jsonData/moviesData.txt"); 
      } 
     }); 
     return view; 
    } 

    public class JsonTask extends AsyncTask<String,String,List<MovieModel>> { 


     @Override 
     protected List<MovieModel> doInBackground(String... params) { 
      try { 
       URL url=new URL(params[0]); 
       connection=(HttpURLConnection)url.openConnection(); 
       connection.connect(); 

       stream=connection.getInputStream(); 
       reader=new BufferedReader(new InputStreamReader(stream)); 
       StringBuffer buffer=new StringBuffer(); 
       String line=""; 
       while ((line = reader.readLine())!=null) 
       { 
        buffer.append(line); 

       } 
       String finalJson=buffer.toString(); 
       JSONObject jsonObject=new JSONObject(finalJson); 
       JSONArray jsonArray=jsonObject.getJSONArray("movies"); 

       List<MovieModel> movieModelslist=new ArrayList<>(); 

       for (int i=0; i<jsonArray.length();i++) { 
        JSONObject finaljsonobject = jsonArray.getJSONObject(i); 
        MovieModel movieModel=new MovieModel(); 
        movieModel.setMovie(finaljsonobject.getString("movie")); 
        movieModel.setYear(finaljsonobject.getInt("year")); 
        movieModel.setRating((float) finaljsonobject.getDouble("rating")); 

        movieModel.setDuration(finaljsonobject.getString("duration")); 
        movieModel.setDirector(finaljsonobject.getString("director")); 
        movieModel.setTagline(finaljsonobject.getString("tagline")); 
        movieModel.setImage(finaljsonobject.getString("image")); 
        movieModel.setStory(finaljsonobject.getString("story")); 


        List<MovieModel.Cast> castList=new ArrayList<>(); 
        for (int j=0; j<jsonObject.getJSONArray("cast").length(); j++) 
        { 


         MovieModel.Cast cast=new MovieModel.Cast(); 
         cast.setName(finaljsonobject.getJSONArray("cast").getJSONObject(j).getString("name")); 
         castList.add(cast); 
        } 
        movieModel.setCastlist(castList); 
        movieModelslist.add(movieModel); 

       } 
       return movieModelslist; 


      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } finally { 
       if (connection != null) { 
        connection.disconnect(); 
       } 
       try { 
        if (reader != null) { 
         reader.close(); 
        } 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(List<MovieModel> result) { 
      super.onPostExecute(result); 
      MovieAdapter Adapter=new MovieAdapter(getContext(),R.layout.row,result); 
      lvmovies.setAdapter(Adapter); 

     } 
    } 

    public class MovieAdapter extends ArrayAdapter 
    { 
     private List<MovieModel> movieModelslist; 
     private int resource; 
     private LayoutInflater inflater; 

     public MovieAdapter(Context context, int resource, List objects) { 
      super(context, resource, objects); 

      inflater=(LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 



     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 

      if (convertView == null) 
      { 
       convertView=inflater.inflate(resource,null); 

      } 

      ImageView movieicon; 
      TextView tvmovie; 
      TextView tvtagline; 
      TextView tvyear; 
      TextView tvduration; 
      TextView tvdirctor; 
      RatingBar tvrating; 
      TextView tvcast; 
      TextView tvstory; 

      movieicon=(ImageView)convertView.findViewById(R.id.movieicon); 
      tvmovie=(TextView)convertView.findViewById(R.id.tvmovie); 
      tvtagline=(TextView)convertView.findViewById(R.id.tvtagline); 
      tvyear=(TextView)convertView.findViewById(R.id.tvyear); 
      tvduration=(TextView)convertView.findViewById(R.id.tvduration); 
      tvdirctor=(TextView)convertView.findViewById(R.id.tvdirector); 
      tvcast=(TextView)convertView.findViewById(R.id.tvcast); 
      tvstory=(TextView)convertView.findViewById(R.id.tvstory); 
      tvrating=(RatingBar)convertView.findViewById(R.id.ratingBar); 

      ImageLoader.getInstance().displayImage(movieModelslist.get(position).getImage(), movieicon); 

      tvmovie.setText(movieModelslist.get(position).getMovie()); 
      tvtagline.setText("TagLine -"+movieModelslist.get(position).getTagline()); 
      tvyear.setText("Year -"+movieModelslist.get(position).getYear()); 
      tvduration.setText("Duration -"+movieModelslist.get(position).getDuration()); 
      tvdirctor.setText("Dircetor -"+movieModelslist.get(position).getDirector()); 

      tvrating.setRating(movieModelslist.get(position).getRating()/2); 

      StringBuffer stringBuffer=new StringBuffer(); 
      for (MovieModel.Cast cast : movieModelslist.get(position).getCastlist()) 
      { 
       stringBuffer.append(cast.getName()+ ", "); 
      } 

      tvcast.setText(stringBuffer); 
      tvstory.setText(movieModelslist.get(position).getMovie()); 

      return convertView; 
     } 
    } 
} 
+1

は私にあなたのJSONデータを表示するレトロフィット学ぶ行く –

+0

ます。http:/それは誤り

@Override protected List<MovieModel> doInBackground(String... params) { List<MovieModel> movieModelslist=new ArrayList<>(); try { URL url=new URL(params[0]); connection=(HttpURLConnection)url.openConnection(); connection.connect(); // blah blah... catch, finally return movieModelslist; // instead of null 

他のオプションの場合は空のリストとして返すことができる範囲にリストを移動します/jsonparsing.parseapp.com/jsonData/moviesData.txt – maxwell

+0

コードの行番号184と103は何ですか? – SripadRaj

答えて

0

あなたはhttp接続またはjson構文解析が何らかの例外を投げたのであなたはNullPointerExceptionを取得しましたonPostExecuteに渡され

return null 

でpが、その後、空リストとしてアダプターに入れ、その後、あなたが見た例外を取得します。

したがって、nullを戻さないようにして直ちに問題を解決してください。 AsyncTaskを忘れて

関連する問題