2016-12-31 8 views
1

アプリケーションをコンパイルしているときに、Textviewsが更新されていないため、アンドロイドモニタにエラーが表示されません。 JSONをJavaオブジェクトと配列にマップする方法を教えてもらえますか?OKhttpライブラリでデータを解析することができます

メインActivity.java

public class MainActivity extends AppCompatActivity { 
public static final String TAG = MainActivity.class.getSimpleName(); 
private MovieDetails mmoviedetails; 
private TextView Title; 
private TextView id; 
private TextView releasedate; 
private TextView originaltitle; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Title=(TextView)findViewById(R.id.titleid); 
    id=(TextView)findViewById(R.id.id); 
    releasedate=(TextView)findViewById(R.id.releasedateid); 
    originaltitle=(TextView)findViewById(R.id.originaltitleid); 



    String forecastUrl = "https://api.themoviedb.org/3/movie/550?api_key=6d349f745d2d8b31d1bfd1cccfbd7e0"; 
    if (isNetworkAvailable()) { 
     OkHttpClient client = new OkHttpClient(); 
     Request request = new Request.Builder() 
       .url(forecastUrl) 
       .build(); 

     Call call = client.newCall(request); 
     call.enqueue(new Callback() { 
      @Override 
      public void onFailure(Call call, IOException e) { 

      } 

      @Override 
      public void onResponse(Call call, Response response) throws IOException { 
       try { 
        String jsonData = response.body().string(); 
        Log.v(TAG, jsonData); 
        if (response.isSuccessful()) { 
         mmoviedetails = getCurrentDetails(jsonData); 
         runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 
           updateDisplay(); 
          } 
         }); 

        } else { 
         alertUserAboutError(); 
        } 
       } 
       catch (IOException e) { 
        Log.e(TAG, "Exception caught: ", e); 
       } 
       catch (JSONException e) { 
        Log.e(TAG, "Exception caught: ", e); 
       } 
      } 
     }); 
    } 
    else { 
     Toast.makeText(this, getString(R.string.network_unavailable_message), 
       Toast.LENGTH_LONG).show(); 
    } 

    Log.d(TAG, "Main UI code is running!"); 
} 

private void updateDisplay() { 

    originaltitle.setText(mmoviedetails.getOriginal_title()+""); 
    id.setText(mmoviedetails.getId()+""); 
    Title.setText(mmoviedetails.getTitle()+""); 
    releasedate.setText(mmoviedetails.getRelease_date()+""); 
} 

private MovieDetails getCurrentDetails(String jsonData) throws JSONException { 
    JSONObject forecast = new JSONObject(jsonData); 
    JSONObject currently = forecast.getJSONObject("JSON"); 

    MovieDetails moviedetails = new MovieDetails(); 
    moviedetails.setId(currently.getInt("Id")); 
    moviedetails.setOriginal_title(currently.getString("Original_title")); 
    moviedetails.setTitle(currently.getString("Title")); 
    moviedetails.setRelease_date(currently.getString("Release_date")); 
    return moviedetails; 
} 


private boolean isNetworkAvailable() { 
    ConnectivityManager manager = (ConnectivityManager) 
      getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = manager.getActiveNetworkInfo(); 
    boolean isAvailable = false; 
    if (networkInfo != null && networkInfo.isConnected()) { 
     isAvailable = true; 
    } 

    return isAvailable; 
} 

private void alertUserAboutError() { 

} 

MovieDetails.java事前に

public class MovieDetails { 
private String Title; 
private String Release_date; 
private int Id; 
private String original_title; 

public String getTitle() { 
    return Title; 
} 

public void setTitle(String title) { 
    Title = title; 
} 

public String getRelease_date() { 
    return Release_date; 
} 

public void setRelease_date(String release_date) { 
    Release_date = release_date; 
} 

public int getId() { 
    return Id; 
} 

public void setId(int id) { 
    Id = id; 
} 

public String getOriginal_title() { 
    return original_title; 
} 

public void setOriginal_title(String original_title) { 
    this.original_title = original_title; 
}} 

感謝。

答えて

0

よく言われているapiは、apiのエラーを無効にしていません(あなたが間違った1つを投稿したと仮定しています)。
私のAPIキーを使用しています。この

{ 
    "adult": false, 
    "backdrop_path": "/wSJPjqp2AZWQ6REaqkMuXsCIs64.jpg", 
    "belongs_to_collection": null, 
    "budget": 63000000, 
    "genres": [ 
    { 
     "id": 18, 
     "name": "Drama" 
    } 
    ], 
    "homepage": "http://www.foxmovies.com/movies/fight-club", 
    "id": 550, 
    "imdb_id": "tt0137523", 
    "original_language": "en", 
    "original_title": "Fight Club", 
    "overview": "A ticking-time-bomb insomniac and a slippery soap salesman  channel  primal male aggression into a shocking new form of therapy. Their  concept catches on, with underground \"fight clubs\" forming in every town, until  an eccentric gets in the way and ignites an out-of-control spiral toward  oblivion.", 
    "popularity": 5.419718, 
    "poster_path": "/adw6Lq9FiC9zjYEpOqfq03ituwp.jpg", 
    "production_companies": [ 
    { 
     "name": "Regency Enterprises", 
     "id": 508 
    }, 
    { 
     "name": "Fox 2000 Pictures", 
     "id": 711 
    }, 
    { 
     "name": "Taurus Film", 
     "id": 20555 
    }, 
    { 
     "name": "Linson Films", 
     "id": 54050 
    }, 
    { 
     "name": "Atman Entertainment", 
     "id": 54051 
    }, 
    { 
     "name": "Knickerbocker Films", 
     "id": 54052 
    } 
    ], 
    "production_countries": [ 
    { 
     "iso_3166_1": "DE", 
     "name": "Germany" 
    }, 
    { 
     "iso_3166_1": "US", 
     "name": "United States of America" 
    } 
    ], 
    "release_date": "1999-10-14", 
    "revenue": 100853753, 
    "runtime": 139, 
    "spoken_languages": [ 
    { 
     "iso_639_1": "en", 
     "name": "English" 
    } 
    ], 
    "status": "Released", 
    "tagline": "How much can you know about yourself if you've never been in a     fight?", 
    "title": "Fight Club", 
    "video": false, 
    "vote_average": 8.1, 
    "vote_count": 5876 
} 

今、これはあなたがすなわちMovieDetails.javaはPOJOがどのように説明し、上記のフィールド
を持っていない作ったjsonarrays とPOJOの多くで一つの大きなJSON値であり、ここにはいくつかの点があります

  1. コンテンツは{}内にラップされるたびに個別のpojoを作成する必要があるので、すべてのJSONArrayに対して個別のpojosを作成しなければならないデフォルトのroot {}があります。ここでjson配列は "genres" "production_companies"、 "production countries"、 "spoken_language"の合計で5つのポポが作成されます。MainPojo.java、Genres.java、Prod1.java、Prod2.java、Spoken.java
  2. pojosを作成するあなたはPOJO発電機をオンラインで使うことができます。 http://www.jsonschema2pojo.org/
  3. あなたの主なpojoでは、exのために異なるPOJO型のarraylistsを定義する必要があります。 ArrayListのジャンル=新しいArrayList();そしてあなたは、このデータあなたはジャクソンまたはGson
    のようなライブラリを使用するか、他JSONObjectとJSONArrayクラスを使って自分でそれを行うことができるため
    を解析する方法をある点に来休符

に同じ

} {内部

要素は、ここでJSON配列
ジャンル、production_companies、production_countries、spoken_languagesあるJSONアレイので、基本的に、あなたの解析は、Liを行く

[]包装JSONObjectsと要素でありますKEこの

MainPojo main = new MainPojo(); 
JSONObject jo = new JSONObject(url); 
main.adult = jo.getString("adult"); //remember the string that is passed in  as argument should be same as you see in the json and you should be using getter ans setters for assigning values 
main.backdrop = jo.getString("backdrop_path"); and so on 
. 
. 
. 
. 
//now we know genres is a jsonarray so 
Genres g; 

JSONArray genres = jo.getJSONArray("genres"); 
    for(int i =0;i<genres.length();i++) 
    { 
    g = new Genres(); 
    JSONObject genObject = genres.getJSONObject(i); 
    g.id = genObject.getString("id"); 
    genres.add(g); 
    } 

同じ手順が、私はより良い明確化のために言及しているリンクからAPIのPOJOを生成するために、あなたをお勧めします他のすべてのjsonarray
追跡されます!

希望すると助かります!

関連する問題