Ignorer de manière incorrecte un paquet

Je reçois cette erreur.

03-22 11: 41: 20.439 20933-20933 / com.androidcss.jsonexample E / RecyclerView: Aucun adaptateur connecté; sauter la mise en page 03-22 11: 41: 20.760 20933-20933 / com.androidcss.jsonexample W / art: Avant Android 4.1, méthode int android.support.v7.widget.ListViewCompat.lookForSelectablePosition (int, boolean) aurait incorrectement remplacé méthode package-private dans android.widget.ListView

MainActivity.java

package com.androidcss.jsonexample; import android.app.ProgressDialog; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.widget.Toast; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { // CONNECTION_TIMEOUT and READ_TIMEOUT are in milliseconds public static final int CONNECTION_TIMEOUT = 10000; public static final int READ_TIMEOUT = 15000; private RecyclerView mRVFishPrice; private AdapterFish mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Make call to AsyncTask new AsyncLogin().execute(); } private class AsyncLogin extends AsyncTask { ProgressDialog pdLoading = new ProgressDialog(MainActivity.this); HttpURLConnection conn; URL url = null; @Override protected void onPreExecute() { super.onPreExecute(); //this method will be running on UI thread pdLoading.setMessage("\tLoading..."); pdLoading.setCancelable(false); pdLoading.show(); } @Override protected Ssortingng doInBackground(Ssortingng... params) { try { // Enter URL address where your json file resides // Even you can make call to php file which returns json data url = new URL("https://newsapi.org/v1/articles?source=the-next-web&sortBy=latest&apiKey=bdba5de1b490495796a1595f77ed3f37"); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); return e.toSsortingng(); } try { // Setup HttpURLConnection class to send and receive data from php and mysql conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(READ_TIMEOUT); conn.setConnectTimeout(CONNECTION_TIMEOUT); conn.setRequestMethod("GET"); // setDoOutput to true as we recieve data from json file conn.setDoOutput(true); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); return e1.toSsortingng(); } try { int response_code = conn.getResponseCode(); // Check if successful connection made if (response_code == HttpURLConnection.HTTP_OK) { // Read data sent from server InputStream input = conn.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(input)); SsortingngBuilder result = new SsortingngBuilder(); Ssortingng line; while ((line = reader.readLine()) != null) { result.append(line); } // Pass data to onPostExecute method return (result.toSsortingng()); } else { return ("unsuccessful"); } } catch (IOException e) { e.printStackTrace(); return e.toSsortingng(); } finally { conn.disconnect(); } } @Override protected void onPostExecute(Ssortingng result) { //this method will be running on UI thread pdLoading.dismiss(); List data=new ArrayList(); pdLoading.dismiss(); try { JSONObject object= new JSONObject(result); JSONArray array = object.getJSONArray("articles"); // Extract data from json and store into ArrayList as class objects for(int i=0;i<array.length();i++){ JSONObject json_data = array.getJSONObject(i); Item item= new Item(); item.name= json_data.getString("title"); data.add(item); } // Setup and Handover data to recyclerview mRVFishPrice = (RecyclerView)findViewById(R.id.fishPriceList); mAdapter = new AdapterFish(MainActivity.this, data); mRVFishPrice.setAdapter(mAdapter); mRVFishPrice.setLayoutManager(new LinearLayoutManager(MainActivity.this)); } catch (JSONException e) { Toast.makeText(MainActivity.this, e.toString(), Toast.LENGTH_LONG).show(); } } } } 

AdapterFish.java

 package com.androidcss.jsonexample; import android.content.Context; import android.support.v4.content.ContextCompat; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.bumptech.glide.Glide; import java.util.Collections; import java.util.List; public class AdapterFish extends RecyclerView.Adapter { private Context context; private LayoutInflater inflater; List data= Collections.emptyList(); Item current; int currentPos=0; // create constructor to innitilize context and data sent from MainActivity public AdapterFish(Context context, List data){ this.context=context; inflater= LayoutInflater.from(context); this.data=data; } // Inflate the layout when viewholder created @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view=inflater.inflate(R.layout.card, parent,false); MyHolder holder=new MyHolder(view); return holder; } // Bind data @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { // Get current position of item in recyclerview to bind data and assign values from list MyHolder myHolder= (MyHolder) holder; Item current=data.get(position); myHolder.name.setText(current.getName()); // load image into imageview using glide /*Glide.with(context).load("http://192.168.1.7/test/images/" + current.fishImage) .placeholder(R.drawable.ic_img_error) .error(R.drawable.ic_img_error) .into(myHolder.ivFish);*/ } // return total item from List @Override public int getItemCount() { return data.size(); } class MyHolder extends RecyclerView.ViewHolder{ TextView name; // create constructor to get widget reference public MyHolder(View itemView) { super(itemView); name = (TextView)itemView.findViewById(R.id.name); } } } 

Item.java

 package com.androidcss.jsonexample; public class Item { Ssortingng name; public Ssortingng getName() { return name; } } 

Vous devez setLayoutManager avant setAdapter .

Vous initialisez RecyclerView en AsynTask , cela signifie que votre ReyclerView n’est pas prêt lors de la création de la vue.

Apportez les modifications suivantes.

 //make list as global variable private List data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //view should be initialized in UI thread data=new ArrayList<>(); mRVFishPrice = (RecyclerView)findViewById(R.id.fishPriceList); mAdapter = new AdapterFish(MainActivity.this, data); mRVFishPrice.setLayoutManager(new LinearLayoutManager(MainActivity.this)); mRVFishPrice.setAdapter(mAdapter); //Make call to AsyncTask new AsyncLogin().execute(); } 

Puis dans votre onPostExecute

remplacer –

 mRVFishPrice = (RecyclerView)findViewById(R.id.fishPriceList); mAdapter = new AdapterFish(MainActivity.this, data); mRVFishPrice.setAdapter(mAdapter); mRVFishPrice.setLayoutManager(new LinearLayoutManager(MainActivity.this)); 

avec

 mAdapter.notifyDatasetChanged(); 

et aussi, assurez-vous de supprimer les données List data de postexecute et de les rendre globales

Et s’il vous plaît utilisez Volley pour faire des appels d’API au lieu d’implémenter une tâche d’arrière-plan personnalisée. Volley gère les appels d’API de manière asynchrone sans perturber votre code réel.

J’ai fait face au même problème. Le problème était dans la mise en page. Vous devez d’abord vérifier que si vos vues et vos présentations sont dans le bon ordre.