componente para selecionar fecha y JSpinner en una tabla cambia la informacion en las otras filas

Buen Dia Necesito de su ayuda para solucionar dos problemas. inserte un componente para seleccionar fecha en una columna de una tabla y un JSpinner tambien. de la siguiente manera:

Tengo una libreria la cual me ayuda a usar el componente para usar las fechas llamada

RSCalendar

introducir la descripción de la imagen aquí

-tengo una clase llamada tabla_spinner, la cual es la misma para el componente de las fechas

package clases;  import java.awt.Component; import javax.swing.AbstractCellEditor; import javax.swing.JSpinner; import javax.swing.JTable; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer;  /**  *  * @author ANGELICA  */ public class tabla_spinner extends AbstractCellEditor implements TableCellRenderer,TableCellEditor{     JSpinner spinner=new JSpinner();     Object valorActual;        @Override     public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {         return spinner;//y retornamos el label     }     @Override     public Component getTableCellRendererComponent         (JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {          //si el datos es un objetc osea jlabel         if (value instanceof JSpinner) {             spinner=(JSpinner) value;//lo convertimos a JLabel              return spinner;//y retornamos el label         }          return spinner;     }     @Override     public Object getCellEditorValue() {         return spinner;     }  } 

-y con el siguiente codigo añado el JSpinner y el componente RSCalendar a las tablas

    TableColumn Tcolfechachooser=vencimiento_productos_tabla.getColumnModel().getColumn(1);              Tcolfechachooser.setCellEditor(new tabla_fechachosser());     Tcolfechachooser.setCellRenderer(new tabla_fechachosser());      TableColumn Tcolspinner=vencimiento_productos_tabla.getColumnModel().getColumn(3);     Tcolspinner.setCellEditor(new tabla_spinner());       Tcolspinner.setCellRenderer(new tabla_spinner());      modelo_vencimiento_productos=(DefaultTableModel) vencimiento_productos_tabla.getModel();     Object nuevafila[]={"","","","",""};     modelo_vencimiento_productos.addRow(nuevafila); 
  1. mi problema es que por ejemplo con el JSpinner selecciono un numero en una fila por ejemplo fila (1), y cuando selecciono otra fila por ejemplo fila (2), esta fila seleccionada (la 2) en la columna en la que esta el JSpinner se transfiere el numero de la anterior fila(1). exactamente ocurre con la celda en la cual esta el componente donde selecciono la fecha.Osea que en conclucion el codigo que estoy usando hara esto con todos los componentes.

introducir la descripción de la imagen aquí

  1. mi segundo problema es al tratar de obtener estos datos del JSpinner y el componente para selecionar las fechas. con el siguiente codigo:

    String fecha=String.valueOf(modelo_vencimiento_productos.getValueAt(vencimiento_productos_tabla.getSelectedRow(),1));

    String dias=String.valueOf(modelo_vencimiento_productos.getValueAt(vencimiento_productos_tabla.getSelectedRow(),3));

lo que me recolecta es esto:

-para la fecha:

rojeru_san.componentes.RSDateChooser[,-192,-20,0x0,invalid,layout=javax.swing.GroupLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=16777217,maximumSize=,minimumSize=,preferredSize=java.awt.Dimension[width=240,height=40]] 

-para el numero del JSpinner

javax.swing.JSpinner[,-193,-20,0x0,invalid,layout=javax.swing.plaf.basic.BasicSpinnerUI$  Handler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.BorderUIResource$  CompoundBorderUIResource@2df0c8a,flags=328,maximumSize=,minimumSize=,preferredSize=] 

¿Cómo evitar que una ruta de MapViewDirections se recargue si la ubicación actual cambia?

Mi problema es que cuando se genera una ruta en mi aplicación, cada que la ubicación actual cambia, MapViewDirections se vuelve a cargar y hace que tenga errores cuando no hay conexión a internet

Mi idea es que cuando se genere la ruta, y no haya conexión a internet, vaya desapareciendo la linea conforme se avanza, sin que se recargue la ruta.

Todo esto para que trabaje offline la app.

Se puede hacer que solo una vez se cargue la ruta sin ver la ubicación actual mientras esté desplegada la ruta?

Mi código está implementado de la siguiente manera.

class HomeScreen extends React.Component {    static navigationOptions = ({ navigation }) => {     return {       headerTitle: ('',         <Image style={{ width: 150, height: 40 }}           source={require('./images/mibici.png')}         />       ),        //Use navigations.getParam to access get access to menu, because this is static and cannot access by itself       headerLeft: (         <TouchableHighlight onPress={navigation.getParam('menu')}>           <Image style={{ width: 50, height: 40 }}             source={require('./images/hamburger_icon.png')}           />         </TouchableHighlight>       ),      };   };    constructor(props) {     super(props);     this.state = {      ...AbortController     }   }     state = {     mapRegion: null,     lastLat: null,     lastLong: null   }    componentDidMount() {     this.watchID = navigator.geolocation.watchPosition((position) => {       // Creating the object to update this.state.mapRegion through the onRegionChange function and calculates the zoom of the first run       let region = {         latitude: position.coords.latitude,         longitude: position.coords.longitude,         latitudeDelta: LATITUDE_DELTA,         longitudeDelta: LONGITUDE_DELTA,       }       this.onRegionChange(region, region.latitude, region.longitude);     }, (error) => console.log(error));   }     onRegionChange(region, lastLat, lastLong) {     this.setState({       mapRegion: region,       // If there are no new values set the current ones       lastLat: lastLat || this.state.lastLat,       lastLong: lastLong || this.state.lastLong     });     currentLocation = { latitude: this.state.lastLat, longitude: this.state.lastLong }     this.setState({       currentLocation: currentLocation //created to get the current location for creating routes     })   }    componentWillUnmount() {     navigator.geolocation.clearWatch(this.watchID);   }     render() {      const predictions = this.state.predictions.map(prediction => (       <TouchableHighlight         onPress={() =>           this.getRouteDirections(             //prediction.structured_formatting.main_text //Simple and short location text             prediction.description //For detailed location text           )         }       >         <View>           <Text style={styles.suggestions}> {prediction.description} </Text>         </View>       </TouchableHighlight>     ));      Geocoder.init(GOOGLE_MAPS_API_KEY);      return (       <View style={{ flex: 1 }}>         <TextInput           style={styles.mapSearch}           placeholder="Empecemos escribiendo tu destino..."           onChangeText={             destination => {               this.onChangeDestinationDebounced(destination)             }           }         />          {predictions}          {this.checkConnection()}          <MapView           provider={PROVIDER_GOOGLE}           style={{ flex: 1 }} //Shows map in full view           region={this.state.mapRegion} //The map centers in the current position of user           showsUserLocation={true}           showsMyLocationButton={true} //Button to ubicate the current location in the center           loadingEnabled={true}           //showsTraffic={true}           cacheEnabled={true}           showsScale={true}           //customMapStyle={customMap}         >           <MapViewDirections             origin={this.state.currentLocation}             waypoints={this.state.waypointStation}             destination={this.state.finalDestination}             apikey={GOOGLE_MAPS_API_KEY}             strokeWidth={4} //Sets how widht you want the line of the generated route             strokeColor="#B82C2C"//Sets the color you want the line of the generated route             mode="bicycling"             language="es"             optimizeWaypoints={true}              ref={c => this.mapView = c}             onPress={this.onMapPress}              onReady={result => {               var numeral = require('numeral');               const distanceMax = numeral(result.distance).format('0')               var distance = numeral(result.distance).format('0.00')               var duration = numeral(result.duration).format('0,0')                Alert.alert(                 'Aquí tienes información sobre tu viaje',                 'Distancia: ' + distance + ' km \n Duración: ' + duration + ' minutos',                 [                   { text: '¡Empecemos!', onPress: () => this.setState({ startPressed: true }) },                   { text: '¿No era lo que querías?', onPress: () => this.setState({ finalDestination: '', startPressed: false }) }                 ]               )               ShowedOnceOnReady = true              }             }           />            {this.state.markers.map(marker => (             <Marker               coordinate={marker.coordinate}               title={marker.title}               description={marker.description}               pinColor='#5882FA'             />           ))}          </MapView>          {this.state.startPressed == true ?           <TouchableOpacity             style={styles.cancelButton}             onPress={this._cancelTravel}           >             <Text style={styles.cancelButtonText}> Cancelar viaje </Text>           </TouchableOpacity>           : null}        </View >     )   } }

¿Es posible disparar un evento cuando un item de un ListViewCollection cambia?

estoy trabajando hace poco en WPF, y me ha surgido una duda.

Tengo dos ViewModel,

public class Foo {     public string Ejemplo { get; set; }     public bool Checked { get; set; }       }  public class Bar {     private ObservableCollection<Foo> mFooList;     public ListCollectionView FooList { get; set; }     public Bar()     {         //Lleno la lista observable          FooList = new ListCollectionView(mFooList);        } } 

Hasta este punto, todo funciona correcto, ya que FooList es Filtrable y editable a su vez.

El ViewModel Bar se representaría visualmente con un DataGrid en el cual aparecerá el string Ejemplo en una columna, y en otra un CheckBox que permita la posibilidad de chequear la fila correspondiente.

Lo manejo de la siguiente manera:

<DataGrid Grid.Row="1"     AutoGenerateColumns="False"     ItemsSource="{Binding FooList}"     CanUserAddRows="False" CanUserDeleteRows="False"     d:DataContext="{d:DesignInstance Type=viewModels:Foo}" >     <DataGrid.Columns>         <DataGridTextColumn Header="Ejemplo" Binding="{Binding Path=Ejemplo}" IsReadOnly="True"/>                         <DataGridTemplateColumn Header="Debe exportarse?" >                 <DataGridTemplateColumn.CellTemplate>                 <DataTemplate>                     <CheckBox IsChecked="{Binding Path=Checked, UpdateSourceTrigger=PropertyChanged}"/>                 </DataTemplate>             </DataGridTemplateColumn.CellTemplate>         </DataGridTemplateColumn>     </DataGrid.Columns> </DataGrid> 

El asunto, es que necesito detectar cuando un CheckBox es tildado, o destildado, pero no estoy logrando detectarlo con el ViewModel mediante INotifyPropertyChanged ni bindear un Command en la propiedad Checked del CheckBox

¿Cómo debo notificar a la vista para poder reaccionar a un cambio en la columna de los CheckBox?

Gracias!

Scraping con pagina que no cambia la Url al actualizar

Estaba probando algo de scraping y llegue a esta duda:

Tengo esta Url.

Muestra en una tabla información, por defecto muestra 50 datos en la tabla, luego tiene un input que si se pone un valor hasta 252 y se da enter actualiza la web sin cambiar la url y muestra en la tabla el máximo de datos (252). Con el siguiente código puedo traer los que se cargan por defecto, como podría hacer para que el json que se crea traiga los 252, no entiendo mucho todavía y me estoy guiando por la documentación.

import requests import urllib.request import pandas as pd import re import json from bs4 import BeautifulSoup  url = 'https://report.boonecountymo.org/mrcjava/servlet/SH01_MP.I00290s' path_file_dest = r'JailResidents.json' response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Platform; Security; OS-or-CPU; Localization; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)'})  def write_doc_json(content, mode):     own_file = open(path_file_dest, mode, encoding='utf-8')     own_file.write(content.decode('utf-8'))     own_file.close()  if response.status_code == 200:      info = []     soup = BeautifulSoup(response.text, "html.parser")      odd = soup.findAll('tr', attrs={'class': 'odd'})      even = soup.findAll('tr', attrs={'class': 'even'})      for x in range (1, (len(even) - 1)):         Last_Name = even[x].find('td', {'data-th': 'Last Name'}).get_text()         First_Name = even[x].find('td', {'data-th': 'First Name'}).get_text()         Middle_Name = even[x].find('td', {'data-th': 'Middle Name'}).get_text()         Sex = even[x].find('td', {'data-th': 'Sex'}).get_text()         Race = even[x].find('td', {'data-th': 'Race'}).get_text()         Age = even[x].find('td', {'data-th': 'Age'}).get_text()         City = even[x].find('td', {'data-th': 'City'}).get_text()         State = even[x].find('td', {'data-th': 'State'}).get_text()          individuo = {'Apellido' : Last_Name,                       'Nombre' : First_Name,                       'Segundo Nombre' : Middle_Name,                      'Sexo' : Sex,                      'Raza' : Race,                      'Edad' : Age,                      'Ciudad' : City,                      'Estado' : State}          info.append(individuo)      for x in range (0,len(odd)):         Last_Name = odd[x].find('td', {'data-th': 'Last Name'}).get_text()         First_Name = odd[x].find('td', {'data-th': 'First Name'}).get_text()         Middle_Name = odd[x].find('td', {'data-th': 'Middle Name'}).get_text()         Sex = odd[x].find('td', {'data-th': 'Sex'}).get_text()         Race = odd[x].find('td', {'data-th': 'Race'}).get_text()         Age = odd[x].find('td', {'data-th': 'Age'}).get_text()         City = odd[x].find('td', {'data-th': 'City'}).get_text()         State = odd[x].find('td', {'data-th': 'State'}).get_text()          individuo = {'Apellido' : Last_Name,                       'Nombre' : First_Name,                       'Segundo Nombre' : Middle_Name,                      'Sexo' : Sex,                      'Raza' : Race,                      'Edad' : Age,                      'Ciudad' : City,                      'Estado' : State}          info.append(individuo)      content = json.dumps(info, indent=4, sort_keys=True, ensure_ascii=False).encode('utf-8')     write_doc_json(content ,'w+')     data = pd.read_json(path_file_dest, encoding = 'UTF-8') else:     print('No se pudo conectar')  data 

introducir la descripción de la imagen aquí

Llegue a esto al buscar pero no se como hacerlo, los datos no existen al cargar la pagina:

El problema es que cuando la pagina tiene javascript y es dinamica cuando haces el request a la pagina la informacion aun no esta en el html.

Para resolver eso lo primero que suelo hace es mediante Postman Interceptor intercepto las solicitudes mientras accedo normalmente con el navegador a la pagina donde esta la informacion.

Luego de eso identifica la solicitud hecha con javascript o ajax que retorna la informacion que quieres y una vez identifiques el la solicitud replicala tu mismo con python bien sea con urlopen o requests.

Una vez lo consigas extrae la informacion de la respuesta de dicho request con BeutifulSoup u otra cosa

¿Por qué httpbody de NSMutableURLRequest cambia caracteres de mi string en swift?

Actualmente trabajo en un poryecto de swift en el que el usuario puede subir fotografias a un servidor, para lograr esto codifico la imagen capturada a base 64 esto lo consigo con el sguiente código:

func convertImageToBasee64(image: UIImage){     let imageData = image.jpegData(compressionQuality: 1)     let base64String = imageData!.base64EncodedString()     return base64String } 

Posteriormente creo la variable que uso como parámetro

let imagenEnviar = convertImageToBasee64(image: imagenVistaPrevia.image!) let parametros = "imagen=" + imagenEnviar 

y por último ejecuto la clase de conexion a mi server.

let conexion:clsConexionIA = clsConexionIA.init(url: "miurl.php", params: parametros) conexion.request{(output) in   print(output) } 

esta es mi clase de conexión:

class clsConexionIA {    let URL: String    let PARAMS: String     init(url: String, params: String) {        self.URL = url        self.PARAMS = params.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!    }     func request(successHandler: @escaping (_ response: String) -> Void)->Void{        let request = NSMutableURLRequest(url: NSURL(string: self.URL)! as URL)        request.httpMethod = "POST"        request.httpBody = self.PARAMS.data(using: String.Encoding.utf8, allowLossyConversion: false)        let headers = ["Content-Type": "application/x-www-form-urlencoded"]        request.allHTTPHeaderFields = headers         let task = URLSession.shared.dataTask(with: request as URLRequest) { datos, respuesta, error in            if error != nil {                successHandler(String(describing: error));            } else {                let responseString = NSString(data: datos!, encoding: String.Encoding.utf8.rawValue)                print("RESPUESTA \(responseString)")                successHandler((responseString as String?)!);            }        }        task.resume()    } } 

Mi problema es que del lado de mi servidor php estoy recibiendo una cadena que no es un base64 válido, por lo que la imagen se guarda corrupta-dañada.

He utilzado Charles Proxy para inspeccionar los parametros que le paso a mi servidor, y en notado que el string que se envía al server es distinto al que obtengo al inspeccionar en tiempo de ejecución la linea self.PARAMS.data(using: String.Encoding.utf8, allowLossyConversion: false)

¿a qué se debe esto y como puedo corregirlo? Yo imagino que la parte .data(using: String.Encoding.utf8, allowLossyConversion: false) hace alguna modificación a mi string, pero no he encontrado la forma de corregir esta situación. También he intentado obtener el .data sin el parámetro allowLossyConversion pero no noto cambio alguno.

Algunos de los cambios que noto en el string es, por ejemplo, que me reemplaza los caracteres + por espacios en blanco, también la longitud de caracteres es distinta, por lo que forzar un replace de espacios del lado del servidor no me funciona.

Se que hasta este punto self.PARAMS = params.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)! mi string base64 es válido porque lo inspecciono en tiempo de ejecución, copio su valor y lo pego en algún decodificador online y la imagen se genera correctamente.

Espero y alguien pueda ayudarme, gracias de antemano comunidad!