Ich habe unten eine Thread-Klasse, die eine Datei von einer URL liest und das Ergebnis dann in einer öffentlichen statischen Variable speichert, damit sie von anderen Klassen abgerufen werden kann. Gibt es eine bessere Möglichkeit, dies zu erreichen?
Danke
public class ReadContent implements Runnable{
private HttpConnection connection;
private InputStream inputStream;
private String url;
public ReadContent(String url){
this.url = url;
}
public void run() {
readContentURL();
}
private void readContentURL() {
try {
connection = (HttpConnection)Connector.open(url);
connection.setRequestMethod(HttpConnection.GET);
connection.setRequestProperty("Connection", "close");
inputStream = connection.openDataInputStream();
// inputStream = getClass().getResourceAsStream(url);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int c ;
while (true) {
c = inputStream.read();
if (c == -1)
break;
baos.write(c);
}
SavedJSON.result = new JSONObject(new String(baos.toByteArray()));
}
catch(Exception e){
e.printStackTrace();
}
}
}
Hier ist meine vorgeschlagene Lösung -
public class MyFuture{
private final Object lock = new Object();
private JSONObject value;
public void set(JSONObject t){
value = t;
synchronized(lock){
value = t;
lock.notifyAll();
}
}
public JSONObject get(){
synchronized(lock){
while(value == null)
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
return value;
}
}
}
public class SavedJSON {
public static MyFuture result;
}
public class ReadContent implements Runnable{
private HttpConnection connection;
private InputStream inputStream;
private String url;
public ReadContent(String url){
this.url = url;
}
public void run() {
readContentURL();
}
private void readContentURL() {
try {
int len = 0;
connection = (HttpConnection)Connector.open(url);
connection.setRequestMethod(HttpConnection.GET);
// connection.setRequestProperty("Connection", "close");
inputStream = connection.openDataInputStream();
// inputStream = getClass().getResourceAsStream(url);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int c ;
while (true) {
c = inputStream.read();
if (c == -1)
break;
++len;
baos.write(c);
}
SavedJSON.result.set(new JSONObject(new String(baos.toByteArray(), 0, len, "utf-8")));
}
catch(Exception e){
e.printStackTrace();
}
}
}