2017-03-06 2 views
3

Je prends https://jsonplaceholder.typicode.com/users avec asynctask mais je prends pour utiliser l'objet pojo.Comment faites-vous pojo avec asynctask json

À quoi dois-je ajouter du code? Quelle ligne dois-je écrire et comment dois-je écrire?

DataRetriever.java

public DataRetriever(Activity activity) { 
    activityWeakReference = new WeakReference<>(activity); 
    current_activity = activityWeakReference.get(); 
} 

@Override 
protected void onPreExecute() { 

    imageView = (ImageView) current_activity.findViewById(R.id.imageView); 
    if (current_activity != null) { 
     recyclerView = (RecyclerView) current_activity.findViewById(R.id.recyclerView); 
     swipeRefreshLayout = (SwipeRefreshLayout) current_activity.findViewById(R.id.swipe_container); 

     swipeRefreshLayout.setColorSchemeResources(
       android.R.color.holo_blue_bright, 
       android.R.color.holo_green_light, 
       android.R.color.holo_orange_light, 
       android.R.color.holo_red_light); 

     recyclerView.setHasFixedSize(true); 

    } else { 
     Log.d(TAG, "unable to get current activity"); 
     Toast.makeText(current_activity, "unable to get current activity", Toast.LENGTH_SHORT).show(); 
    } 
    super.onPreExecute(); 
    progressDialog = new ProgressDialog(current_activity); 
    progressDialog.setMessage("Loading..."); 
    progressDialog.show(); 
} 

@SafeVarargs 
@Override 
protected final Integer doInBackground(List<String>... integers) { 
    HttpURLConnection httpURLConnection = null; 
    URL url; 
    List<String> local_list = integers[0]; 
    type = Integer.parseInt(local_list.get(0)); 
    String jsonString, jsonData; 
    return_status = 0; 
    switch (type) { 
     case 1: 
      url_string = "https://jsonplaceholder.typicode.com/users"; 
      break; 
     case 2: 
      url_string = "https://jsonplaceholder.typicode.com/albums"; 
      recieved_id = Integer.parseInt(local_list.get(1)); 
      title = local_list.get(2); 
      break; 
     case 3: 
      url_string = "https://jsonplaceholder.typicode.com/photos"; 
      recieved_id = Integer.parseInt(local_list.get(1)); 
      title = local_list.get(2); 
      break; 
    } 
    try { 
     url = new URL(url_string); 
     httpURLConnection = (HttpURLConnection) url.openConnection(); 
     int statusCode = httpURLConnection.getResponseCode(); 
     if (statusCode == 200) { 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream())); 
      StringBuilder stringBuilder = new StringBuilder(); 
      while ((jsonData = bufferedReader.readLine()) != null) { 
       stringBuilder.append(jsonData); 
      } 
      jsonString = stringBuilder.toString(); 
      jsonParser(jsonString); 
      return_status = 1; 
     } else { 
      Log.d(TAG, "Some error occurred could'nt fetch data"); 
      Toast.makeText(current_activity, "Some error occurred could'nt fetch data", Toast.LENGTH_SHORT).show(); 
      return_status = 0; 
     } 
     publishProgress(local_list); 
    } catch (Exception e) { 
     Log.d(TAG, e.getLocalizedMessage()); 
    } finally { 
     if (httpURLConnection != null) { 
      httpURLConnection.disconnect(); 
     } 
    } 

    return return_status; 
} 


private void jsonParser(String jsonString) { 
    int names_count, id; 
    String name; 
    try { 
     JSONArray jsonArray = new JSONArray(jsonString); 
     names_count = jsonArray.length(); 
     if (!listValues.isEmpty()) 
      listValues.clear(); 
     if (!pictureValues.isEmpty()) 
      pictureValues.clear(); 
     for (int i = 0; i < names_count; i++) { 
      JSONObject array_items = jsonArray.getJSONObject(i); 
      ListValues jsonValues, pictureValue; 
      switch (type) { 
       case 1: 
        id = array_items.optInt("id"); 
        name = array_items.optString("name"); 
        jsonValues = new ListValues(id, name); 
        listValues.add(jsonValues); 
        break; 
       case 2: 
        id = array_items.optInt("userId"); 
        name = array_items.optString("title"); 
        if (id == recieved_id) { 
         jsonValues = new ListValues(id, name); 
         listValues.add(jsonValues); 
        } 
        break; 
       case 3: 
        id = array_items.optInt("albumId"); 
        name = array_items.optString("title"); 
        String pictureURL = array_items.getString("url"); 
        if (id == recieved_id) { 
         jsonValues = new ListValues(id, name); 
         pictureValue = new ListValues(id, pictureURL); 
         listValues.add(jsonValues); 
         pictureValues.add(pictureValue); 
        } 
        break; 
      } 
     } 
    } catch (JSONException e) { 
     Log.d(TAG, e.getLocalizedMessage()); 
    } 
} 

@Override 
protected void onProgressUpdate(final List<String>... values) { 
    List<String> progressList = values[0]; 
    Log.d(TAG, progressList.get(0)); 
    swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      switch (type) { 
       case 1: 
        new DataRetriever(current_activity).execute(values[0]); 
       case 2: 
        new DataRetriever(current_activity).execute(values[0]); 
       case 3: 
        new DataRetriever(current_activity).execute(values[0]); 
      } 
     } 
    }); 
    super.onProgressUpdate(values); 
} 

@Override 
protected void onPostExecute(final Integer integer) { 
    if (integer != 0) { 

     recyclerAdapter = new RecyclerAdapter(listValues); 
     recyclerView.addItemDecoration(new ListItemDecorator(current_activity.getApplicationContext())); 
     recyclerView.setAdapter(recyclerAdapter); 

     // use a linear layout manager 
     mLayoutManager = new LinearLayoutManager(current_activity); 
     recyclerView.setLayoutManager(mLayoutManager); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 


     if (swipeRefreshLayout.isRefreshing()) 
      swipeRefreshLayout.setRefreshing(false); 

     recyclerView.addOnItemTouchListener(new  RecyclerTouchListener(current_activity.getApplicationContext(), recyclerView, new ClickListener() { 
      @Override 
      public void onClick(View view, int position) { 
       String pictureURL = null; 
       ListValues feed = listValues.get(position); 
       if (!pictureValues.isEmpty()) { 
        ListValues feed2 = pictureValues.get(position); 
        pictureURL = feed2.getValue(); 
       } 
       String value = feed.getValue(); 
       switch (type) { 
        case 1: 
         intent = new Intent(current_activity, AlbumActivity.class); 
         intent.putExtra("id", (position + 1)); 
         intent.putExtra("value", value); 
         current_activity.startActivity(intent); 
         break; 
        case 2: 
         intent = new Intent(current_activity, PhotosActivity.class); 
         intent.putExtra("id", (position + 1)); 
         intent.putExtra("value", value); 
         current_activity.startActivity(intent); 
         break; 
        case 3: 
         intent = new Intent(current_activity, ImageDisplay.class); 
         intent.putExtra("imageUrl", pictureURL); 
         current_activity.startActivity(intent); 
         break; 
       } 
      } 

      @Override 
      public void onLongClick(View view, int position) { 
      } 
     })); 
    } else { 
      //   Log.d(TAG, "unable to get data"); 
     if (swipeRefreshLayout.isRefreshing()) { 
      Toast.makeText(current_activity, "Unable to refresh data! Try opening application again", Toast.LENGTH_SHORT).show(); 
     } else { 
      Toast.makeText(current_activity, "Failed to fetch data! try again", Toast.LENGTH_SHORT).show(); 
     } 
    } 
    super.onPostExecute(integer); 
    progressDialog.dismiss(); 
} 

public interface ClickListener { 
    void onClick(View view, int position); 

    void onLongClick(View view, int position); 
} 

public static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener { 

    private GestureDetector gestureDetector; 
    private ClickListener clickListener; 

    public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final ClickListener clickListener) { 
     this.clickListener = clickListener; 
     gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { 
      @Override 
      public boolean onSingleTapUp(MotionEvent e) { 
       return true; 
      } 

      @Override 
      public void onLongPress(MotionEvent e) { 
       View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); 
       if (child != null && clickListener != null) { 
        clickListener.onLongClick(child, recyclerView.getChildPosition(child)); 
       } 
      } 
     }); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 

     View child = rv.findChildViewUnder(e.getX(), e.getY()); 
     if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) { 
      clickListener.onClick(child, rv.getChildPosition(child)); 
     } 
     return false; 
    } 

    @Override 
    public void onTouchEvent(RecyclerView rv, MotionEvent e) { 
    } 

    @Override 
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 

    } 
} 
    } 

Post.java

public class Post implements Serializable { 
@SerializedName("userId") 
private int userId; 
@SerializedName("name") 
@Expose 
public String name; 

@SerializedName("id") 
private int id; 

@SerializedName("title") 
private String title; 

@SerializedName("body") 
private String body; 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public int getUserId() { 
    return userId; 
} 

public void setUserId(int userId) { 
    this.userId = userId; 
} 


public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

public String getTitle() { 
    return title; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 

public String getBody() { 
    return body; 
} 

public void setBody(String body) { 
    this.body = body; 
} 
    } 

Votre conseil important pour moi

Merci!

Répondre

0

Vous pouvez facilement le faire avec GSON et POJO

premier .. vous devez créer plusieurs modèles

Post.java

public class Post 
{ 
    private String id; 

    private String phone; 
    private String username; 
    private String website; 
    private Address address; 
    private String email; 
    private Company company; 
    private String name; 

    //setter and getter 
} 

Company.java

public class Company 
{ 
    private String catchPhrase; 
    private String name; 
    private String bs; 

    //setter and getter 
} 

Address.java

public class Address 
{ 
    private Geo geo; 
    private String zipcode; 
    private String street; 
    private String suite; 
    private String city; 

    //setter and getter 
} 

Geo.java

public class Geo 
{ 
    private String lng; 
    private String lat; 

    //setter and getter 
} 

Après cela, chaîne JSON que vous obtenez de l'API. analyser en utilisant Gson ..

List<Post> post = new Gson().fromJson(YOUR_JSON_STRING,new TypeToken<List<Post>>() {}.getType());