2016-10-20 13 views
0

私はカスタム開発のアダプタのgetViewメソッドが呼び出されていないので、私はAPIから収集しているデータを表示し、解析してアンドロイドスタジオのスクリーンにレンダリングしようとしています。助けてください!私の配列アダプタでgetViewメソッドが呼び出されていません

はここで私のFargmentです:

public class eventsFragment extends Fragment { 
View myView; 
View rootView; 
ArrayList<events> eventList; 
private ListView LV; 
private ProgressDialog pDialog; 
private static String url = "https://kambuku.com/app/tickets"; 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    rootView = inflater.inflate(R.layout.events_layout, container, false); 
    eventList = new ArrayList<>(); 
    LV = (ListView) rootView.findViewById(R.id.List); 

    //GET CONNECTION INFO 
    myView = inflater.inflate(R.layout.events_layout, container, false); 
    ConnectivityManager connectivityManager = (ConnectivityManager) 
      getActivity().getSystemService(Context.CONNECTIVITY_SERVICE); 

    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 
    if (networkInfo != null && networkInfo.isConnected()) { 
     new getAllEvents().execute(); 
    } else { 
     Toast.makeText(getActivity().getApplicationContext(), 
       "No Active Connection!", 
       Toast.LENGTH_LONG) 
       .show(); 
    } 

    return myView; 

} 


private class getAllEvents extends AsyncTask<Void, Void, Void> { 

    String feed = ""; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     //Show Progress Dialog 
     pDialog = new ProgressDialog(getActivity()); 
     pDialog.setMessage("Please wait... Fetching your Events"); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
    } 


    @Override 
    protected Void doInBackground(Void... arg0) { 
     String Result; 
     String DEBUG_TAG = "EVENTS"; 

     HttpHandler handle = new HttpHandler(); 
     String jsonStr = null; 
     try { 
      jsonStr = handle.EventsConnection(url, DEBUG_TAG); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     Result = jsonStr; 

     Log.e(DEBUG_TAG, "JSON RESPONSE IS" + Result); 
     if (Result != null) { 
      try { 
       JSONObject jsonObject = new JSONObject(Result); 
       Log.e(DEBUG_TAG, "JSON OBJECT IS" + jsonObject); 

       //GET JSON ARRAY NODE 
       JSONArray tickets = jsonObject.getJSONArray("tickets"); 
       Log.e(DEBUG_TAG, "JSON TICKET ARRAY LENGTH IS" + tickets.length()); 

       for (int i = 0; i < tickets.length(); i++) { 
        JSONObject t = tickets.getJSONObject(i); 

        Log.e(DEBUG_TAG, "JSON OBJECT " + i + " is " + t); 


        events event = new events(); 

        event.setEventName(t.getString("eventName")); 
        event.setId(t.getString("id")); 
        event.setVenue(t.getString("venue")); 
        event.setCity(t.getString("city")); 
        event.setArtwork("https://kambuku.com/"+t.getString("artwork")); 
        event.setHost(t.getString("host")); 
        event.setNotes(t.getString("notes")); 
        event.setPrice(t.getString("price")); 
        event.setEventDate(t.getString("eventDate")); 


        eventList.add(event); 
       } 

      } catch (final JSONException e) { 
       Log.e(DEBUG_TAG, "Json parsing error: " + e.getMessage()); 
       getActivity().runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         Toast.makeText(getActivity().getApplicationContext(), 
           "Json parsing error: " + e.getMessage(), 
           Toast.LENGTH_LONG) 
           .show(); 
        } 
       }); 
      } 
     } else { 
      Log.e(DEBUG_TAG, "Couldn't get json from server."); 
      getActivity().runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        Toast.makeText(getActivity().getApplicationContext(), 
          "Couldn't get json from server. Check LogCat for possible errors!", 
          Toast.LENGTH_LONG) 
          .show(); 
       } 
      }); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     Log.e("PostExecute", "YOUR LIST ARE "+eventList); 
     eventsAdapter eventAdapter = new eventsAdapter(getActivity().getApplicationContext(), R.layout.event_item, eventList); 
     LV.setAdapter(eventAdapter); 
     if (pDialog.isShowing()) 
      pDialog.dismiss(); 

    } 

} 

}

ここに私のアダプタです:あなたのアダプタで

public class eventsAdapter extends ArrayAdapter { 
private ArrayList<events> ArrayListEvents; 
private int Resource; 
private Context context; 
private LayoutInflater inflater; 

public eventsAdapter(Context context, int resource, ArrayList<events> objects) { 
    super(context, resource, objects); 

    Log.e("ADAPTER", "OBJECTS ARE "+objects); 
    Log.e("ADAPTER", "RESOURCES ARE "+resource); 

    ArrayListEvents = objects; 
    Resource = resource; 
    this.context = context; 
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 


@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    Log.e("ADAPTER", "WE ARE HERE"); 
    ViewHolder holder; 
    if (convertView == null) { 
     convertView = inflater.inflate(Resource, null); 
     holder = new ViewHolder(); 

     holder.artwork = (ImageView) convertView.findViewById(R.id.Artwork); 
     holder.eventName = (TextView) convertView.findViewById(R.id.eventName); 
     holder.eventNotes = (TextView) convertView.findViewById(R.id.eventNotes); 

     convertView.setTag(holder); 
    } else { 
     holder = (eventsAdapter.ViewHolder)convertView.getTag(); 
    } 

    new DownloadImageResource(holder.artwork).execute(ArrayListEvents.get(position).getArtwork()); 
    holder.eventName.setText(ArrayListEvents.get(position).getEventName()); 
    holder.eventNotes.setText(ArrayListEvents.get(position).getNotes()); 
    Log.e("Holder", "Holder"+holder.eventName.getText()); 
    return convertView; 
} 

private static class ViewHolder { 
    ImageView artwork; 
    TextView eventName; 
    TextView eventNotes; 
} 


private class DownloadImageResource extends AsyncTask<String, Void, Bitmap> 
{ 
    ImageView Artwork; 

    DownloadImageResource(ImageView Artwork) 
    { 
     this.Artwork = Artwork; 
    } 

    protected Bitmap doInBackground(String... urls) 
    { 
     String urlDisplay = urls[0]; 
     Bitmap conn = null; 
     try 
     { 
      InputStream inputStream = new java.net.URL(urlDisplay).openStream(); 
      conn = BitmapFactory.decodeStream(inputStream); 

     }catch (Exception e){ 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return conn; 
    } 

    protected void onPostExecute(Bitmap result) 
    { 
     Log.e("Image", "Image Download"+result); 
     Artwork.setImageBitmap(result); 
    } 
} 

}

+0

アダプタを設定した後、リストビューで 'notifyDatasetChanged()'を呼び出そうとします。 –

+0

LV.notifyDataSetChanged();アダプタ –

+0

を呼び出した後にこれを呼び出してください。getViewメソッド()内でAsyncTaskを決して呼び出すべきではありません。 –

答えて

0

オーバーライドgetItemCount方法。

@Override public int getItemCount(){ return ArrayListEvents .size(); }

0

問題はネストされたAsyncTaskを実行していることです。私。すでにタスクを実行しているリストビュー内の各行に対して別のタスクを実行しています。これはAndroidでは良くありません。詳細はquestionを参照してください。

関連する問題