2016-05-18 13 views
-1

私のrecyclerviewにはjsonが入っていません。リサイクルビューを含む私のフラグメントコードです。私はボストンライブラリを介してPHPからjsonデータを取得しています。私はフラグメントコード、アダプタコード、および私のアプリのログキャッチを投稿しました。リサイクルビューにjsonが設定されていません

public String get_events="urlfordata"; 
    public RequestQueue requestQueue; 
    public StringRequest stringRequest; 
    public String college_name; 
    public RecyclerView recyclerView; 
    public LinearLayoutManager llm; 
    public List<events> events = new ArrayList<events>(); 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
      View v = inflater.inflate(R.layout.events_home,container,false); 
      recyclerView = (RecyclerView) v.findViewById(R.id.neostat_home_recycleview); 


      SharedPreferences sha1 = getActivity().getSharedPreferences("user_data", Context.MODE_PRIVATE); 
      college_name = sha1.getString("college_name",null); 
      llm = new LinearLayoutManager(getContext()); 
      recyclerView.setLayoutManager(llm); 

      requestQueue = Volley.newRequestQueue(getContext()); 
      stringRequest = new StringRequest(Request.Method.POST, get_events, new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 

        try { 
         JSONArray jsonArray = new JSONArray(response); 

         for (int i=0;i<jsonArray.length();i++) 
         { 
          JSONObject jsonObject = jsonArray.getJSONObject(i); 
          events = new ArrayList<>(); 
          events.add(new events(jsonObject.getString("title"),jsonObject.getString("image"))); 
          System.out.println(jsonObject.getString("title")); 
         } 



        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 


       } 
      }, new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 

       } 
      }) 
      { 
       @Override 
       protected Map<String, String> getParams() throws AuthFailureError { 
        HashMap<String,String> hashMap = new HashMap<String,String>(); 
        hashMap.put("college_name",""); 
        return hashMap; 
       } 
      }; 

      requestQueue.add(stringRequest); 


      events_adapter adapter = new events_adapter(events); 
      recyclerView.setAdapter(adapter); 


      return v; 
     } 
    } 

私のアダプタ: -

import android.content.Context; 
import android.support.v7.widget.CardView; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 

import com.squareup.picasso.Picasso; 

import java.util.List; 

/** 
* Created by cheta on 5/18/2016. 
*/ 
public class events_adapter extends RecyclerView.Adapter<events_adapter.EventHolder> { 


    List<events> events; 
    events_adapter(List<events> events) 
    { 
     this.events =events; 

    } 
    @Override 
    public EventHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.event_cardview,parent,false); 
     EventHolder pvh = new EventHolder(v); 
     return pvh; 
    } 

    @Override 
    public void onBindViewHolder(EventHolder holder, int position) { 

     holder.textView.setText(events.get(position).title); 
     Context context = holder.imageView.getContext(); 
     Picasso.with(context).load(events.get(position).image).fit().into(holder.imageView); 

    } 

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

    @Override 
    public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
     super.onAttachedToRecyclerView(recyclerView); 
    } 

    public static class EventHolder extends RecyclerView.ViewHolder 
    { 
     ImageView imageView; 
     TextView textView; 
     CardView cardView; 

     EventHolder(View v) 
     { 
      super(v); 
      cardView = (CardView) v.findViewById(R.id.events_home_cardview); 
      imageView = (ImageView) v.findViewById(R.id.events_home_image); 
      textView = (TextView) v.findViewById(R.id.events_home_title); 

     } 

    } 
} 

私のログ: -

05-18 20:56:41.538 26693-26693/com.ph.com.neostat W/System: ClassLoader referenced unknown path: /data/app/com.ph.com.neostat-1/lib/x86 
05-18 20:56:41.598 26693-26703/com.ph.com.neostat I/art: Background sticky concurrent mark sweep GC freed 15897(1349KB) AllocSpace objects, 8(176KB) LOS objects, 72% free, 1026KB/3MB, paused 7.468ms total 52.247ms 
05-18 20:56:41.741 26693-26693/com.ph.com.neostat W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable 
05-18 20:56:41.835 26693-26988/com.ph.com.neostat D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true 

                    [ 05-18 20:56:42.023 26693:26693 D/   ] 
                    HostConnection::get() New Host Connection established 0xaa97fda0, tid 26693 


                    [ 05-18 20:56:42.157 26693:26988 D/   ] 
                    HostConnection::get() New Host Connection established 0xaec12aa0, tid 26988 
05-18 20:56:42.355 26693-26988/com.ph.com.neostat I/OpenGLRenderer: Initialized EGL, version 1.4 
05-18 20:56:43.596 26693-26988/com.ph.com.neostat W/EGL_emulation: eglSurfaceAttrib not implemented 
05-18 20:56:43.596 26693-26988/com.ph.com.neostat W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xaa75e620, error=EGL_SUCCESS 
05-18 20:56:43.784 26693-26693/com.ph.com.neostat I/Choreographer: Skipped 99 frames! The application may be doing too much work on its main thread. 
05-18 20:56:45.295 26693-26693/com.ph.com.neostat I/Choreographer: Skipped 86 frames! The application may be doing too much work on its main thread. 
05-18 20:56:45.621 26693-26699/com.ph.com.neostat W/art: Suspending all threads took: 38.568ms 
05-18 20:57:25.469 26693-26988/com.ph.com.neostat W/EGL_emulation: eglSurfaceAttrib not implemented 
05-18 20:57:25.470 26693-26988/com.ph.com.neostat W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xab27ec00, error=EGL_SUCCESS 
05-18 20:57:27.763 26693-26988/com.ph.com.neostat E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb2eef960 
05-18 20:57:36.429 26693-26988/com.ph.com.neostat W/EGL_emulation: eglSurfaceAttrib not implemented 
05-18 20:57:36.429 26693-26988/com.ph.com.neostat W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xab27ef40, error=EGL_SUCCESS 
05-18 20:57:37.093 26693-26988/com.ph.com.neostat E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb2eef8f0 
05-18 20:57:43.260 26693-26699/com.ph.com.neostat W/art: Suspending all threads took: 79.213ms 

                 --------- beginning of system 
05-18 20:57:44.483 26693-26693/com.ph.com.neostat W/FragmentManager: moveToState: Fragment state for classified_home{9dbcc53 #0 id=0x7f0c006a android:switcher:2131492970:1} not updated inline; expected state 3 found 2 
05-18 20:57:44.747 26693-26988/com.ph.com.neostat W/EGL_emulation: eglSurfaceAttrib not implemented 
05-18 20:57:44.748 26693-26988/com.ph.com.neostat W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xab27ef60, error=EGL_SUCCESS 
05-18 20:57:45.461 26693-26988/com.ph.com.neostat E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb2eef5e0 
05-18 20:57:48.924 26693-26693/com.ph.com.neostat W/ViewRootImpl: Cancelling event due to no window focus: MotionEvent { action=ACTION_CANCEL, actionButton=0, id[0]=0, x[0]=561.48926, y[0]=977.46094, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=7782899, downTime=7776256, deviceId=0, source=0x1002 } 
05-18 20:57:48.924 26693-26693/com.ph.com.neostat W/ViewRootImpl: Cancelling event due to no window focus: MotionEvent { action=ACTION_CANCEL, actionButton=0, id[0]=0, x[0]=561.48926, y[0]=977.46094, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=7782899, downTime=7776256, deviceId=0, source=0x1002 } 
05-18 20:57:48.924 26693-26693/com.ph.com.neostat W/ViewRootImpl: Cancelling event due to no window focus: MotionEvent { action=ACTION_CANCEL, actionButton=0, id[0]=0, x[0]=561.48926, y[0]=977.46094, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=7782899, downTime=7776256, deviceId=0, source=0x1002 } 
05-18 20:57:48.924 26693-26693/com.ph.com.neostat W/ViewRootImpl: Cancelling event due to no window focus: MotionEvent { action=ACTION_CANCEL, actionButton=0, id[0]=0, x[0]=561.48926, y[0]=977.46094, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=7782899, downTime=7776256, deviceId=0, source=0x1002 } 
+0

申し訳ありませんが、新しいアンドロイドスタジオ..:)... System.out.println(jsonObject.getString( "title"));それは、PHPがjsonを正しく返すかどうかをログでチェックするためのjuctでした.. – dheeraj

+0

'System.out.println(jsonObject.getString(" title "));' [もちろん...しません](http://ideone.com/PPHi95) – Selvin

答えて

0

Selvinは、物事の下に心に留めておく、コメントで言ったように。

1.events_adapter adapter = new events_adapter(events);- RecyclerViewためデータを取得した後、アダプタを設定(HTTPレスポンス)か、その前に設定した場合RecyclerViewは、ビューをリフレッシュするように、adpter.notifyDataSetChanged();を呼び出します。あなたは一度だけ作成することとしているときに、eventsオブジェクトを作成している各ループで -

2.events = new ArrayList<>(); in loop

代わりSystem.out.println("blah blah blah");使用の

3.Android Logging API - Log

要求を行うか、アダプタインスタンスを作成する前に、これらのonResponse方法

ソリューション1
コールへの変更以下、このラインevents = new ArrayList<>();ください。

for (int i=0;i<jsonArray.length();i++){ 
    JSONObject jsonObject = jsonArray.getJSONObject(i);  
    events.add(new events(jsonObject.getString("title"),jsonObject.getString("image"))); 
    Log.i("TAG","Title "+jsonObject.getString("title")); 
} 
adapter.notifyDataSetChanged(); 

溶液2

events = new ArrayList<>(); 
for (int i=0;i<jsonArray.length();i++){ 
    JSONObject jsonObject = jsonArray.getJSONObject(i); 
    events.add(new events(jsonObject.getString("title"),jsonObject.getString("image"))); 
    Log.i("TAG","Title "+jsonObject.getString("title")); 
} 
events_adapter adapter = new events_adapter(events); 
recyclerView.setAdapter(adapter); 

happyCoding。

+0

in point 3.エラーがあります。もし彼が最初のオプションを使用するならば、 'onResponse'の' events = new ArrayList <>(); 'を実行すべきではありません。 'イベント'はアダプタで使われていた別の 'ArrayList'を指しているので、' adapter.notifyDataSetChanged(); 'はうまくいきません) – Selvin

+0

はい。私はそれを持って..必要な変更を加える.. – Bharatesh

+0

@セルビン今チェックすることをチェック... – Bharatesh

関連する問題