¿Cómo buscar el contenido del sitio web y ponerlo en la forma en que queremos en el diseño de la aplicación para Android?
Su clase extraña de la pregunta que se pide de mí, pero la curiosidad es el mejor profesor y yo ansiosamente quiere saber y desarrollar este tipo de aplicación para Android.
Mi experiencia en el desarrollo de aplicaciones para Android no es tan grande, pero ahora mismo estoy usando WebView para un sitio web que es sensible a su funcionamiento, pero su tomar demasiado tiempo para cargar y no proporcionar que mucha comodidad para el usuario. Aquí está el código que tengo:
- Android WebView Facebook Login (problemas de pop-up / redirección)
- Cómo establecer un título diferente para el cuadro de diálogo de alerta cuando se carga la página WebView?
- Interceptar solicitud de fuente de video HTML5 en Android WebView
- Webview - Mejor manera de subir imágenes desde el dispositivo
- Solicitud de publicación de Android WebView con encabezados personalizados
Actividad principal
package com.testWebview.deep; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends AppCompatActivity { private WebView webview; private ProgressDialog progress; public void runTask(){ ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); if(connec!=null && (connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) || (connec.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED)){ webview = (WebView)findViewById(R.id.MainWebView); WebSettings webSettings = webview.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setLoadsImagesAutomatically(true); webSettings.setLoadWithOverviewMode(true); webSettings.setDomStorageEnabled(true); webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); webSettings.setAllowFileAccess(true); webSettings.setBuiltInZoomControls(true); webSettings.setUseWideViewPort(true); loadingC(); webview.setWebViewClient(new WebViewClient(){ @Override public void onPageStarted(WebView view, String url,Bitmap favicon){ if(!progress.isShowing()){ loadingC(); } } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { if(progress.isShowing()){progress.dismiss();} checkConnection(); webview.loadUrl("file:///android_asset/error.html"); } @Override public void onPageFinished(WebView view, String url) { if(progress.isShowing()) { progress.dismiss(); } } }); webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); webview.setScrollbarFadingEnabled(false); webview.setLayerType(View.LAYER_TYPE_HARDWARE, null); webview.loadUrl("http://www.bharatcoupons.com/"); } else{ checkConnection(); } } public void checkConnection(){ AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Error"); builder.setMessage("Please make sure your connected to internet!"); builder.setCancelable(false); builder.setPositiveButton("retry", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { runTask(); } }); builder.show(); } public void loadingC(){ progress = ProgressDialog.show(this, "Loading", "Please wait for a moment..."); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); runTask(); } @Override public void onBackPressed(){ if(webview.canGoBack()){ webview.goBack(); }else{ super.onBackPressed(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } private class MyAppWebViewClient extends WebViewClient{ } }
MyAppWebViewClient
package com.testWebview.deep; import android.content.Intent; import android.webkit.WebView; import android.webkit.WebViewClient; import android.net.Uri; public class MyAppWebViewClient extends WebViewClient{ @Override public boolean shouldOverrideUrlLoading(WebView view, String url){ if(Uri.parse(url).getHost().endsWith("bharatcoupons.com")){ return false; } Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); view.getContext().startActivity(intent); return true; } }
El código anterior funciona bien con webview, pero su tipo de forma lenta y no profesional de desarrollar una aplicación para Android. Ahora lo que quiero hacer es buscar el contenido del sitio web y ponerlo en el marco de la aplicación que quiero. Les mostraré un ejemplo que les explicará todo lo que quería hacer.
Supongamos que mi sitio web es así:
¿Qué tipo de enfoque debo seguir o métodos, trucos para hacer mi aplicación como esta:
Según mi conocimiento no es una webview que muestra directamente el contenido del sitio web en la aplicación. Al intercambiar a la izquierda oa la derecha, le mostrará el siguiente elemento. Todo el sitio web en esta aplicación pero no utiliza WebView
Ellos han hecho tal marco que está recuperando el contenido del sitio web y ponerlo en la aplicación. Y quiero hacer eso.
No quiero código, pero de dónde debo empezar, ¿Qué tipo de enfoque o técnica debo utilizar para lograr eso.
El sitio web de referencia y la aplicación que estoy tomando con fines educativos no hay otra intención detrás de él
¡Gracias por adelantado!
- Interceptación de descarga en webview y descarga mediante HttpClient
- WebView no cambia de tamaño
- WebView de Android ignorando target = "_ blank" cuando se agrega WebViewClient
- WebView onPageFinished se está llamando cuando el error Página no disponible. ¿Solución?
- Android WebView - Configuración del enfoque de campo HTML con Javascript
- WebView no procesa la página HTML local en el lanzamiento de la aplicación en Android 4.0.x Ice Cream Sandwich
- Android webview - solo línea javascript comentarios causando Uncaught SyntaxError errores?
- WebView causando TypeError no capturado al cargar www.google.com
Enfoque 1:
Utilice un sitio web de respuesta que se ajuste automáticamente a la pantalla móvil / ficha.
Enfoque 2:
Analizar los documentos web como imágenes y texto y mostrarlos en ImageView
u otros contenidos de la interfaz de usuario.
Para el análisis HTML puede utilizar una biblioteca de terceros como JSOUP
Mejor enfoque:
Hoy en día casi todas las empresas / servicios en línea utilizan una API para la comunicación entre la web y otras plataformas. Mantiene todos los datos alineados y flexibles ya que toda la información proviene de una misma fuente. Cree una API RESTful para su servicio web. Hacer llamada a la API y obtener datos en un formato JSON . Más tarde analizar la información y mostrarlo en una vista.
Por ejemplo para obtener la información de un producto específico,
Http: // your_address / shopping / v1 / get_product_info
El resultado en formato JSON podría ser algo como esto,
{ "error": false, "name": "ETC Solid Men's Polo Neck -Tshirt", "description": "Your pruduct description", "images": [ { "preview1": "http://yoururl.com/images/preview1" }, { "preview2": "http://yoururl.com/images/preview2" }, { "preview3": "http://yoururl.com/images/preview3" }, { "preview4": "http://yoururl.com/images/preview4" } ] }
Un buen enfoque tiempo / trabajo / resultados es "envolver" su sitio web dentro de una simple aplicación Córdova. Por lo tanto, debe comenzar a aprender Cordova , a continuación, agregar un código css de respuesta / personalizado para el mundo móvil en su sitio (si no existe todavía) y, a continuación, fijar todo lo que no funciona correctamente en el teléfono (js / css).
Si este sitio web tiene un Api puede hacerlo con la api si tiene datos json puede conectarse a través de json y en el peor de los casos puede analizar su html en xml o json o directamente a los objetos de datos que necesita. La razón por la que este enfoque es menos recomendado es porque si cambian algo en el sitio que podría frenar su interfaz de inmediato.
Los sitios grandes suelen tener un cheque de api: Api de Amazon api de Facebook Soundcloud api
Etc
- RecyclerView con elementos de contenido de ajuste
- ¿Puedo autenticarme con AWS Cognito desde Java simple?