2016-03-28 19 views
1

Ich bin ein junger Android-Entwickler und ich habe es geschafft, ein RecyclerView zusammenzustellen. Verwenden von Volley zum Parsen von JSON-Daten, die Blogposts enthalten, und Verwenden von CardViews zum Ausfüllen des RecyclerView; Ich erhalte den Fehler "Kein Adapter angeschlossen; Layout überspringen", wenn ich ihn auf meinem Gerät starte."RecyclerView: Kein Adapter angeschlossen; Layout überspringen "für Recyclerview

Bitte beachten Sie, ich habe diese Frage recyclerview No adapter attached; skipping layout überprüft, aber es hat nicht geholfen.

Dieser Teil des MainActivity.java

//Creating Views 
    private RecyclerView recyclerView; 
    private RecyclerView.Adapter adapter; 
    private RecyclerView.LayoutManager layoutManager; 

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

     //Initializing Views 
     recyclerView = (RecyclerView) findViewById(R.id.post_recycler); 
     layoutManager = new LinearLayoutManager(this); 
     recyclerView.setLayoutManager(layoutManager); 
     //Adding adapter to recyclerview 
     recyclerView.setAdapter(adapter); 

ich diesen alse versucht haben: MainActivity.java

//Creating Views 
    private RecyclerView recyclerView; 
    private RecyclerView.Adapter adapter; 
    private RecyclerView.LayoutManager layoutManager; 

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

     //Initializing Views 
     recyclerView = (RecyclerView) findViewById(R.id.post_recycler); 
     layoutManager = new LinearLayoutManager(this); 
     recyclerView.setLayoutManager(layoutManager); 

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

    //Initializing Views 
    recyclerView = (RecyclerView) findViewById(R.id.post_recycler); 
    layoutManager = new LinearLayoutManager(this); 
    recyclerView.setLayoutManager(layoutManager); 


    //Initializing the postlist list 
    mPostItemsList = new ArrayList<>(); 

    //Caling method to get data 
    getData(); 

//This method will get data from the web api 
private void getData(){ 
    //Showing progress dialog 
    final ProgressDialog progressDialog = ProgressDialog.show(this, "Loading posts", "Please wait", false, false); 

    //Creating a json request 
    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(ConfigPost.GET_URL, 
      new Response.Listener<JSONArray>() { 
       @Override 
       public void onResponse(JSONArray response) { 
        //Dismissing the progress dialog 
        progressDialog.dismiss(); 

        //calling method to parse json array 
        parseData(response); 

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

       } 
      }); 

    //Creating request queue 
    RequestQueue requestQueue = Volley.newRequestQueue(this); 

    //Adding request to the queue 
    requestQueue.add(jsonArrayRequest); 
} 

//This method will parse json data 
private void parseData(JSONArray array){ 
    for(int i = 0; i<array.length(); i++) { 
     PostItems postItem = new PostItems(); 
     JSONObject jsonObject = null; 
     try { 
      jsonObject = array.getJSONObject(i); 
      postItem.setPost_image(jsonObject.getString(ConfigPost.TAG_POST_IMAGE)); 
      postItem.setPost_title(jsonObject.getString(ConfigPost.TAG_POST_TITLE)); 
      postItem.setPost_body(jsonObject.getString(ConfigPost.TAG_POST_BODY)); 
     } catch (JSONException w) { 
      w.printStackTrace(); 
      //Toast.makeText(this, "Error in parsing Json", Toast.LENGTH_LONG).show(); 
     } 
     mPostItemsList.add(postItem); 
    } 

    //Finally initialing the adapter 
    adapter = new PostAdapter(mPostItemsList, this); 

    //Adding adapter to recyclerview 
    recyclerView.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 
} 

Adapter Klasse

public class PostAdapter extends RecyclerView.Adapter<PostAdapter.ViewHolder>{ 

    private ImageLoader mImageLoader; 
    private Context mContext; 

    //List of posts 
    List<PostItems> mPostItems; 



    public PostAdapter(List<PostItems> postItems, Context context) { 
     super(); 

     //Getting all Posts 
     this.mPostItems = postItems; 
     this.mContext = context; 
    } 

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

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

     PostItems postList = mPostItems.get(position); 

     mImageLoader = VolleyRequest.getInstance(mContext).getImageLoader(); 
     mImageLoader.get(postList.getPost_image(), ImageLoader.getImageListener(holder.postImage, R.mipmap.ic_launcher, android.R.drawable.ic_dialog_alert)); 

     holder.postImage.setImageUrl(postList.getPost_image(), mImageLoader); 
     holder.postTitle.setText(postList.getPost_title()); 
     holder.postBody.setText(postList.getPost_body()); 

    } 


    @Override 
    public int getItemCount(){ 
     //Return the number of items in the data set 
     return mPostItems.size(); 
    } 

    class ViewHolder extends RecyclerView.ViewHolder { 
     public NetworkImageView postImage; 
     public TextView postTitle; 
     public TextView postBody; 

     public ViewHolder(View postView) { 
      super(postView); 
      postImage = (NetworkImageView) postView.findViewById(R.id.post_image); 
      postTitle = (TextView) postView.findViewById(R.id.post_title); 
      postBody = (TextView) postView.findViewById(R.id.post_body); 
     } 
    } 
} 

XML-Layout

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="com.jadebyte.geekng.MainActivity" 
    tools:showIn="@layout/app_bar_main"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/post_recycler" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scrollbars="vertical"/> 
</RelativeLayout> 

Jede Idee, was es verursachen könnte?

+1

Initialisieren Sie den Adapter? Wenn Sie nur 'setAdapter (adapter)' ausführen, bevor Sie den Adapter tatsächlich erstellen, entspricht dies "setAdapter (null)" und Sie sehen diese Nachricht. –

+0

Ich habe meine Frage bearbeitet. – Faraday

+0

Bitte posten Sie auch etwas von Ihrem Adapter-Code, wenn Sie könnten. –

Antwort

0

Sieht aus wie Ihr Adapter ist null.

Sie müssen es etwas setzen:

adapter = new SomeAdapter(); 

Bevor es an die RecyclerView befestigen.

+0

Ich habe meine Frage bearbeitet. – Faraday

0

Ich denke, etwas falsch mit Daten zu schaffen, die Sie Übergabe an Adapter. Ich habe ein einfaches Beispiel mit Ihrem Code gemacht, aber ich habe kein Problem bekommen. Bitte überprüfen Sie diese einmal https://www.dropbox.com/s/xcw6vm3js1ue9ja/SamplePro_Example.zip?dl=0

Und bitte fügen Sie Ihren post_summ.xml Code. Damit kann ich mehr verifizieren

Verwandte Themen