Come mostrare i dati in linea per offline senza SQLdatabase in Android?

Voglio mostrare 3 fragments nella mia Activity e caricare dati da json in qualsiasi fragments ! Mostra i dati dei siti web in Recyclerview con la libreria OkHTTP v3 .
Voglio mostrare questi dati per offline, la mia intenzione è se l'utente distriggers dati / wifi mostrare questi dati per offline . ma non voglio usare Database SQLite !
Posso utilizzare la cache OkHTTP ?
Non so come usare okhttp cache.
Codice di AsyncTask:

 public class freeDataInfo { private Context mContext; private String ServerAddress = freeServer_IP.getFreeIP(); public void getFreeDataInfo(Context context) { mContext = context; //new getInfo().execute(ServerAddress + "limit=10"); new getInfo().execute(ServerAddress); } private class getInfo extends AsyncTask<String, Void, String> { EventBus bus = EventBus.getDefault(); private String ou_response; private List<DataModel> infoModels = new ArrayList<>(); private ProgressDialog dialog; @Override protected void onPreExecute() { //CustomProcessDialog.createAndShow(mContext); //infoModels = new ArrayList<>(); // Initiate Progress dialog = new ProgressDialog(mContext); this.dialog.setMessage("شکیبا باشید..."); this.dialog.show(); infoModels.clear(); } @Override protected String doInBackground(String... params) { OkHttpClient client = new OkHttpClient(); //String url = (String) params[0]; Request request = new Request.Builder() //.url(ServerAddress + "limit=10") .url(ServerAddress) .cacheControl(CacheControl.FORCE_NETWORK) .build(); Response response; try { response = client.newCall(request).execute(); ou_response = response.body().string(); response.body().close(); if (ou_response != null) { try { JSONObject postObj = new JSONObject(ou_response); JSONArray postsArray = postObj.optJSONArray("result"); for (int i = 0; i <= postsArray.length(); i++) { JSONObject postObject = (JSONObject) postsArray.get(i); int id = postObject.getInt("id"); Log.d("id", String.valueOf(id)); String title = postObject.getString("title"); String description = postObject.getString("full_description"); String image = postObject.getString("image"); String category = postObject.getString("categoryName"); String date = postObject.getString("date"); String url = postObject.getString("url"); Log.d("Data", "Post ID: " + id); Log.d("Data", "Post title: " + title); Log.d("Data", "Post image: " + image); Log.d("Data", "Post url: " + url); Log.d("Data", "---------------------------------"); //Use the title and id as per your requirement infoModels.add(new DataModel(id, title, description, category, date, url, image)); } } catch (JSONException e) { e.printStackTrace(); Log.e("error", String.valueOf(e)); } } } catch (IOException e) { e.printStackTrace(); Log.e("error2", String.valueOf(e)); } return ou_response; } @Override protected void onPostExecute(String result) { //CustomProcessDialog.dissmis(); //Stop Progress if (dialog.isShowing()) { dialog.dismiss(); } if (result != null) { bus.post(new MyEvent("forfragment1", infoModels)); } else { Toast.makeText(mContext, "اتصال اینترنت خود را بررسی کنید", Toast.LENGTH_LONG).show(); } } } } 

Codici dell'adattatore:

  • Ha incontrato IndiceOutOfBoundException durante la rimozione di elementi da ListView in Android?
  • Preferenze Android - per modificare l'ordine in cui vengono visualizzati
  • Carica grande text in Android
  • Come posso get il numero ICCID del telefono?
  • Librerie in SDK 17 - android
  • Come creare uno scaffale come una vista in Android?
  •  public class free_recycler_adapter extends RecyclerView.Adapter<free_recycler_adapter.ViewHolder> { private List<DataModel> mDateSet; private Context context; // Provide a suitable constructor (depends on the kind of dataset) public free_recycler_adapter(Context context, List<DataModel> dataSet) { this.context = context; this.mDateSet = dataSet; } // Create new views (invoked by the layout manager) @Override public free_recycler_adapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // create a new view View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.free_card_layout, parent, false); // create ViewHolder return new ViewHolder(view); } // Replace the contents of a view (invoked by the layout manager) @Override public void onBindViewHolder(ViewHolder viewHolder, final int position) { // - get data from your itemsData at this position // - replace the contents of the view with that itemsData viewHolder.free_titleText.setText(Html.fromHtml(mDateSet.get(position).getTitle())); Glide.with(context) .load(mDateSet.get(position).getImage()) .placeholder(R.drawable.ic_download_image) .crossFade() .into(viewHolder.free_avatarImage); viewHolder.free_descText.setText(Html.fromHtml(mDateSet.get(position).getDescription())); viewHolder.free_descText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { v.getContext().startActivity(new Intent(v.getContext(), ContentPage.class) .putExtra("title", mDateSet.get(position).getTitle()) .putExtra("desc", mDateSet.get(position).getDescription()) .putExtra("image", mDateSet.get(position).getImage()) .putExtra("url", mDateSet.get(position).getUrl()) .putExtra("category", mDateSet.get(position).getCategory()) .putExtra("date", mDateSet.get(position).getDate())); } }); } // Return the size of your dataset (invoked by the layout manager) @Override public int getItemCount() { return mDateSet.size(); } public void remove(int position) { mDateSet.remove(position); notifyItemRemoved(position); } public void clear() { mDateSet.clear(); notifyDataSetChanged(); } public void add(List<DataModel> models) { mDateSet.addAll(models); notifyDataSetChanged(); } public void update(List<DataModel> models) { mDateSet.clear(); mDateSet.addAll(models); notifyDataSetChanged(); } // inner class to hold a reference to each item of RecyclerView public static class ViewHolder extends RecyclerView.ViewHolder { public TextView free_titleText, free_descText; public ImageView free_avatarImage; public ViewHolder(View itemLayoutView) { super(itemLayoutView); free_titleText = (TextView) itemLayoutView.findViewById(R.id.pdf_card_title); free_descText = (TextView) itemLayoutView.findViewById(R.id.pdf_card_content); free_avatarImage = (ImageView) itemLayoutView.findViewById(R.id.pdf_card_image); } } } 

    Codici di frammento:

     public class free_fragment extends Fragment { private RecyclerView mRecyclerView; private free_recycler_adapter mAdapter; private RecyclerView.LayoutManager mLayoutManager; private List<DataModel> dataModels = new ArrayList<DataModel>(); private Context context; private boolean isDataFetched; private boolean mIsVisibleToUser; private View view; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragment_free_layout, container, false); context = getContext(); if (mIsVisibleToUser) { LoadData(); } ///----- RecyclerView ----- mRecyclerView = (RecyclerView) view.findViewById(R.id.pdf_RecyclerView); mRecyclerView.setHasFixedSize(true); mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); mAdapter = new free_recycler_adapter(context, dataModels); mRecyclerView.setAdapter(mAdapter); return view; } @Subscribe public void onEvent(MyEvent event) { List<DataModel> dataModels = event.getInfoModels(); /* if (dataModels.size() > 0) { dataModels.remove(dataModels.size() - 1); mAdapter.notifyItemRemoved(dataModels.size()); //mAdapter.setLoaded(); }*/ if (event.fragmentTag.equals("forfragment1")) { mAdapter.add(dataModels); isDataFetched = true; mAdapter.notifyDataSetChanged(); } } @Override public void setUserVisibleHint(boolean isVisibleToUser) { mIsVisibleToUser = isVisibleToUser; if (isVisibleToUser && !isDataFetched && getContext() != null) { context = getContext(); LoadData(); //Remove this call from onCreateView } } private void LoadData() { freeDataInfo dataInfo = new freeDataInfo(); // here getMainDataInfo() should return the server response dataInfo.getFreeDataInfo(context); } @Override public void onResume() { super.onResume(); EventBus.getDefault().register(this); } @Override public void onPause() { EventBus.getDefault().unregister(this); super.onPause(); } } 

    Come posso visualizzare i dati per offline senza Sqlite DataBase ? Grazie a tutti <3

  • perché android è costruito su un VM (Dalvik)
  • Android. Alarm Manager si accende in tempi strane
  • Come get il nome di Android AVD dal nome del dispositivo adb
  • Caricare i file più grandi di 1M dalla cartella degli asset
  • Come get una funzionalità multipagina multiple con due pulsanti e salvare quelle date selezionate?
  • Aggiungendo opzioni per select utilizzando jQuery non funziona
  • 2 Solutions collect form web for “Come mostrare i dati in linea per offline senza SQLdatabase in Android?”

      if (isNetworkStatusAvialable(ctx)) { //Here your normal parsing while network available SharedPreferences app_preferences1 = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); SharedPreferences.Editor editor = app_preferences1.edit(); editor.putString("jsonresponse", "yourjsonresponse"); editor.commit(); } else { final SharedPreferences app_preferences1 = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); String response= app_preferences1.getString("jsonresponse", ""); try { JSONObject postObj = new JSONObject(response); JSONArray postsArray = postObj.optJSONArray("result"); for (int i = 0; i <= postsArray.length(); i++) { JSONObject postObject = (JSONObject) postsArray.get(i); int id = postObject.getInt("id"); Log.d("id", String.valueOf(id)); String title = postObject.getString("title"); String description = postObject.getString("full_description"); String image = postObject.getString("image"); String category = postObject.getString("categoryName"); String date = postObject.getString("date"); String url = postObject.getString("url"); Log.d("Data", "Post ID: " + id); Log.d("Data", "Post title: " + title); Log.d("Data", "Post image: " + image); Log.d("Data", "Post url: " + url); Log.d("Data", "---------------------------------"); //Use the title and id as per your requirement infoModels.add(new DataModel(id, title, description, category, date, url, image)); } } catch (JSONException e) { e.printStackTrace(); Log.e("error", String.valueOf(e)); } } public static boolean isNetworkStatusAvialable (Context context) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivityManager != null) { NetworkInfo netInfos = connectivityManager.getActiveNetworkInfo(); if(netInfos != null) if(netInfos.isConnected()) if (netInfos.isAvailable()) return true; } return false; } 

    Ecco un buon esempio di come utilizzare JsonWriter

    Ecco la documentazione di JsonWriter.

    Questo dovrebbe farlo per scrivere in un file json.

     import java.io.FileWriter; import java.io.IOException; import org.json.simple.JSONArray; import org.json.simple.JSONObject; public class JsonSimpleExample { public static void main(String[] args) { JSONObject obj = new JSONObject(); obj.put("name", "mkyong.com"); obj.put("age", new Integer(100)); JSONArray list = new JSONArray(); list.add("msg 1"); list.add("msg 2"); list.add("msg 3"); obj.put("messages", list); try { FileWriter file = new FileWriter("c:\\test.json"); file.write(obj.toJSONString()); file.flush(); file.close(); } catch (IOException e) { e.printStackTrace(); } System.out.print(obj); } } 

    E quando si desidera leggere di nuovo questo codice, utilizzare questo codice:

     import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.Iterator; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; public class JsonSimpleExample { public static void main(String[] args) { JSONParser parser = new JSONParser(); try { Object obj = parser.parse(new FileReader("c:\\test.json")); JSONObject jsonObject = (JSONObject) obj; String name = (String) jsonObject.get("name"); System.out.println(name); long age = (Long) jsonObject.get("age"); System.out.println(age); // loop arrays JSONArray msg = (JSONArray) jsonObject.get("messages"); Iterator<String> iterator = msg.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } } } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.