2016-05-02 11 views
0

Я пишу приложение, в котором данные из текстового файла сохраняются в массиве и позднее переносится в виджет GWT Highcharts как массив типа Number. Я написал сервлет, который записывает данные из файла в массив, и я застрял здесь. Я не знаю, как передать содержимое массива клиентской части приложения. Есть ли быстрый и простой способ сделать это?Доступ к массиву GWT RPC

Этот код, написанный мной:

DataPointsImpl.java:

package com.pwste.gwt.server; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 

import com.google.gwt.user.server.rpc.RemoteServiceServlet; 
import com.pwste.gwt.client.DataPoints; 

public class DataPointsImpl extends RemoteServiceServlet implements DataPoints { 
    private static final long serialVersionUID = 1L; 

    @Override 
    public Number[] getDataPoints() throws IOException { 
    File dataFile = new File("points.txt"); 
    FileReader dataFileReader = new FileReader(dataFile); 
    BufferedReader dataBufferedReader = new BufferedReader(dataFileReader); 
    Number[] arrayNumber = new Number[10000]; 
    String dataString = dataBufferedReader.readLine(); 

    for (int i = 0; i < arrayNumber.length; i++) { 
     arrayNumber[i] = Integer.parseInt(dataString); 
     dataString = dataBufferedReader.readLine(); 
    } 
    dataBufferedReader.close(); 

    return arrayNumber; 
    } 
} 

DataPoints.java:

package com.pwste.gwt.client; 

import java.io.IOException; 

import com.google.gwt.user.client.rpc.RemoteService; 
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; 

@RemoteServiceRelativePath("dataPoints") 
public interface DataPoints extends RemoteService { 
    Number[] getDataPoints() throws IOException; 
} 

DataPointsAsync.java:

package com.pwste.gwt.client; 

import com.google.gwt.user.client.rpc.AsyncCallback; 

public interface DataPointsAsync { 
    void getDataPoints(AsyncCallback<Number[]> callback); 
} 
+0

вы уже установили RPC. теперь вам просто нужно вызвать его на стороне клиента и передать полученный массив в ваши диаграммы. http://www.gwtproject.org/doc/latest/tutorial/RPC.html#invoke для примера – Tobika

+0

Я создал 'private DataPoints dataPointsService = GWT.create (DataPoints.class);' и 'private Number [] dataTxtPoints = new Number [10000]; 'на стороне клиента, но я понятия не имею, как передать значения из arrayNumber в dataTxtPoints. – MarkTrait

+0

El Hoss просто дал вам пример .. в методе 'onSuccess' вы можете присвоить результат переменной dataTxtPoints – Tobika

ответ

1

Вы должны используйте интерфейс Async на стороне клиента:

private DataPointsAsync dataPointsService = GWT.create(DataPoints.class); 

вы можете воспользоваться услугой таким образом:

dataPointsService.getDataPoints(AsyncCallback<Number[]>(){ 

      @Override 
      public void onSuccess(Number[] result) { 
      // result contains the returning values 
      } 

      @Override 
      public void onFailure(Throwable caught) { 
      Window.alert("panic"); 
      } 
}); 
+0

Хорошо, но как я могу получить значения из массива arrayNumber? 'for (int i = 0; i MarkTrait

+0

Я бы дал попробовать, пока dataTxtPoints является Number []. Но я не уверен, что массив, определенный с номером, является хорошим выбором или если вы должны использовать что-то вроде BigDecimal. –

+0

Хорошо, теперь я вижу, где я ошибся. Большое спасибо за вашу помощь. – MarkTrait