-1

aktualisierenRecycler Ansicht funktioniert nicht

Ansicht ist nun geladen, nachdem ich dies implementiert: -

holder.time.setText(user.getTime()); 

zu

holder.time.setText(Integer.toString(user.getTime())); 

aber ich habe immer noch diese Nachricht in Log: -

E/RecyclerView: No adapter attached; skipping layout 

keine Ahnung?

Ich habe volley verwendet, um Daten vom Server zu erhalten und dann die Daten in der Recycler-Ansicht mit Cardview anzuzeigen. Aber es stürzt die App mit der Fehlermeldung ab, dass der Adapter nicht angehängt ist. Obwohl ich den Adapter angebracht habe. Ich kann das Problem nicht finden. Bitte Hilfe. Datei

Haupt Layout-

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.RecyclerView 
android:layout_height="match_parent" 
android:layout_width="match_parent" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/recycle"/> 

Haupt Java Klasse

public class Leaderboard extends AppCompatActivity { 

private static final String URL = "URL"; 

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

    final RecyclerView recycler = (RecyclerView) findViewById(R.id.recycle); 
    recycler.setLayoutManager(new LinearLayoutManager(Leaderboard.this)); 

    StringRequest request = new StringRequest(URL, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      Log.i("TAG",response); 
      GsonBuilder gsonBuilder = new GsonBuilder(); 
      Gson gson = gsonBuilder.create(); 
      User[] users = gson.fromJson(response, User[].class); 
      recycler.setAdapter(new RecyclerviewAdapter(Leaderboard.this,users)); 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Toast.makeText(Leaderboard.this, "Something Went Wrong!", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    RequestQueue queue = Volley.newRequestQueue(this); 
    queue.add(request); 
} 
} 

Cardview

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:padding="8dp"> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_weight="0.5" 
     android:textSize="24dp" 
     android:padding="8dp" 
     android:textStyle="bold" 
     android:text="1." 
     android:gravity="center" 
     android:id="@+id/rank"/> 
    <TextView 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="6" 
     android:textSize="24dp" 
     android:padding="8dp" 
     android:textStyle="bold" 
     android:text="Ravi Bhardwaj" 
     android:id="@+id/name"/> 
    <TextView 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="4" 
     android:textSize="24dp" 
     android:padding="8dp" 
     android:textStyle="bold" 
     android:gravity="center" 
     android:text="00:04:10" 
     android:id="@+id/time"/> 
</LinearLayout> 

RecyclerviewAdapter

public class RecyclerviewAdapter extends RecyclerView.Adapter<RecyclerviewAdapter.RecyclerViewHolder> { 

private Context context; 
private User[] data; 
public RecyclerviewAdapter(Context context, User[] data){ 
    this.context = context; 
    this.data = data; 
} 

@Override 
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
    View view = inflater.inflate(R.layout.one_row_leaderboard,parent,false); 
    return new RecyclerViewHolder(view); 
} 

@Override 
public void onBindViewHolder(RecyclerViewHolder holder, int position) { 
    User user = data[position]; 
    holder.name.setText(user.getName()); 
    holder.time.setText(user.getTime()); 
    // holder.rank.setText(""+data[position+1]); 
} 

@Override 
public int getItemCount() { 
    return data.length; 
} 

public class RecyclerViewHolder extends RecyclerView.ViewHolder{ 
    TextView rank,name,time; 
    public RecyclerViewHolder(View itemView) { 
     super(itemView); 
     rank = (TextView) itemView.findViewById(R.id.rank); 
     name = (TextView) itemView.findViewById(R.id.name); 
     time = (TextView) itemView.findViewById(R.id.time); 
    } 
} 
} 

Meine Modal Klasse

public class User { 

@SerializedName("name") 
@Expose 
private String name; 
@SerializedName("time") 
@Expose 
private Integer time; 
@SerializedName("id") 
@Expose 
private String id; 

public String getName() { 
    return name; 
} 

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

public Integer getTime() { 
    return time; 
} 

public void setTime(Integer time) { 
    this.time = time; 
} 

public String getId() { 
    return id; 
} 

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

Fehler I Get

E/RecyclerView: No adapter attached; skipping layout 
10-21 21:38:15.160 6718-6718/com.ravibhardwaj.kbcmaster I/TAG: [{"name":"sm","time":240,"id":"19760377672"},{"name":"Ravi Bhardwaj","time":246,"id":"1976037352655019"},{"name":"Ravi Bhard","time":356,"id":"1976037352655566"},{"name":"Ravi Bhard","time":555,"id":"1976037352655566"}] 
10-21 21:38:15.255 6718-6718/com.ravibhardwaj.kbcmaster W/ResourceType: No package identifier when getting value for resource number 0x000000f0 
10-21 21:38:15.259 6718-6718/com.ravibhardwaj.kbcmaster E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.ravibhardwaj.kbcmaster, PID: 6718 
                     android.content.res.Resources$NotFoundException: String resource ID #0xf0 
                      at android.content.res.HwResources.getText(HwResources.java:446) 
                      at android.widget.TextView.setText(TextView.java:4660) 
                      at com.ravibhardwaj.kbcmaster.RecyclerviewAdapter.onBindViewHolder(RecyclerviewAdapter.java:34) 
                      at com.ravibhardwaj.kbcmaster.RecyclerviewAdapter.onBindViewHolder(RecyclerviewAdapter.java:14) 
                      at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6356) 
                      at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6389) 
                      at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5335) 
                      at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5598) 
                      at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5440) 
                      at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5436) 
                      at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2224) 
                      at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1551) 
                      at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511) 
                      at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595) 
                      at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3583) 
                      at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3312) 
                      at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3844) 
                      at android.view.View.layout(View.java:17694) 
                      at android.view.ViewGroup.layout(ViewGroup.java:5631) 
                      at android.widget.FrameLayout.layoutChildren(FrameLayout.java:325) 
                      at android.widget.FrameLayout.onLayout(FrameLayout.java:261) 
                      at android.view.View.layout(View.java:17694) 
                      at android.view.ViewGroup.layout(ViewGroup.java:5631) 
                      at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1766) 
                      at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1610) 
                      at android.widget.LinearLayout.onLayout(LinearLayout.java:1519) 
                      at android.view.View.layout(View.java:17694) 
                      at android.view.ViewGroup.layout(ViewGroup.java:5631) 
                      at android.widget.FrameLayout.layoutChildren(FrameLayout.java:325) 
                      at android.widget.FrameLayout.onLayout(FrameLayout.java:261) 
                      at android.view.View.layout(View.java:17694) 
                      at android.view.ViewGroup.layout(ViewGroup.java:5631) 
                      at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1766) 
                      at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1610) 
                      at android.widget.LinearLayout.onLayout(LinearLayout.java:1519) 
                      at android.view.View.layout(View.java:17694) 
                      at android.view.ViewGroup.layout(ViewGroup.java:5631) 
                      at android.widget.FrameLayout.layoutChildren(FrameLayout.java:325) 
                      at android.widget.FrameLayout.onLayout(FrameLayout.java:261) 
                      at com.android.internal.policy.DecorView.onLayout(DecorView.java:774) 
                      at android.view.View.layout(View.java:17694) 
                      at android.view.ViewGroup.layout(ViewGroup.java:5631) 
                      at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2513) 
                      at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2228) 
                      at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1366) 
                      at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6768) 
                      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:926) 
                      at android.view.Choreographer.doCallbacks(Choreographer.java:735) 
                      at android.view.Choreographer.doFrame(Choreographer.java:667) 
                      at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:912) 
                      at android.os.Handler.handleCallback(Handler.java:761) 
                      at android.os.Handler.dispatchMessage(Handler.java:98) 
                      at android.os.Looper.loop(Looper.java:156) 
                      at android.app.ActivityThread.main(ActivityThread.java:6577) 
                      at java.lang.reflect.Method.invoke(Native Method) 
10-21 21:38:15.259 6718-6718/com.ravibhardwaj.kbcmaster E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832) 
10-21 21:38:15.272 6718-6718/com.ravibhardwaj.kbcmaster I/Process: Sending signal. PID: 6718 SIG: 9 

Ich kann das Problem hier nicht finden. Bitte helfen

+0

Das Problem einer fehlenden Ressource verwandt ist, schwer, genau zu sagen, welche, aber es in Zeile fehlt: RecyclerviewAdapter.java:34 - Sie versuchen, einen Textwert zu setzen, aber die Ressource, die Sie Einstellung ist nicht vorhanden. – Booger

Antwort

1

versuchen, Code zu ändern

holder.time.setText(user.getTime()); 

zu

holder.time.setText(Integer.toString(user.getTime())); 
+0

Die Ansicht wird jetzt geladen, aber das Fehlerprotokoll wird weiterhin unter dem Fehler angezeigt. Irgendeine Idee dazu? E/RecyclerView: Kein Adapter angeschlossen; Layout überspringen –

+0

@RaviBhardwaj - das ist, weil Ihr Code recycler.setAdapter (new RecyclerviewAdapter (Leaderboard.this, Benutzer)); ist nicht auf Hauptthread der Anwendung festgelegt. Sie können den Code von setAdapter onCreate und onResponse call notifyDataStateChanged von recyclerview verschieben –

1

Das Problem in diesem Code ist

holder.time.setText(user.getTime()); 

Als Textview setText haben überlastet (int)

Methode, die mit String-Ressourcen verwendet werden soll. Diese Ressourcen werden durch eine Ganzzahl wie R.string. * Aufgelöst.

In Ihrem Fall Benutzer.getTime() gibt einen Integer-Wert zurück, der wie eine vordefinierte XML-String-Ressource behandelt wird (die in Ihrem Fall nicht existiert).

1
E/RecyclerView: No adapter attached; skipping layout 

Das bedeutet, es gibt keinen Adapter, daher wird das Layout übersprungen, das ist nicht der Fehler ist Info. Wenn Sie es nicht mehr sehen möchten, fügen Sie einen leeren Adapter hinzu und aktualisieren Sie dann den Adapter.

Dies ist Ihr Fehler:

E/AndroidRuntime: FATAL EXCEPTION: main 
            Process: com.ravibhardwaj.kbcmaster, PID: 6718 
                     android.content.res.Resources$NotFoundException: String resource ID #0xf0 

Aus diesem Grund:

holder.time.setText(user.getTime()); 

Denn:

public Integer getTime() { 
    return time; 
} 

, die eine ganze Zahl ist, setText() kann akzeptieren, String oder int, wegen Ressourcen wie R.string.something ist ein int. Fix it:

holder.time.setText(String.valueOf(user.getTime())); 
Verwandte Themen