私は壁に追いやられている問題を経験しています。
このブラックベリー アプリ内に、保持しようとしているクラスがあります。net.rim.device.api.util.Persistable を実装しています。何らかの理由で、これを行うと:
Persistent Object store = PersistentStore.getPersistentObject(M3Session.ID);
JVM が停止し、クラス net.rim.device.api.util.Persistable がそのスーパーインターフェイス net.rim.vm.Persistable にアクセスできないと不平を言います...
何が間違っているのかわかりません。net_rim_api.jar は本来あるべきクラス パスにあり、このant スクリプトを使用してプロジェクトを構築しています。
Intelij 11 Community エディションを IDE として使用しています。
これは私が持続させているクラスです:
package com.transcel.m3.ir;
/**
* Created with IntelliJ IDEA.
* User: Marc Byfield
* Date: 9/10/12
* Time: 11:24 PM
*/
import net.rim.device.api.system.Application;
import net.rim.device.api.util.Persistable;
import net.rim.device.api.util.StringUtilities;
import java.util.Date;
public class M3Session implements Persistable {
private String key;
private long timeCreated;
public final static long TIMEOUT = 1200000L;
static String ApplicaitonID = Application.getApplication().getClass().getName();
static String STORE_NAME = "session_store";
public final static long ID = StringUtilities.stringHashToLong(ApplicaitonID + STORE_NAME);
public String getKey() {
return key;
}
public void setKey(final String key) {
this.key = key;
Date newTime = new Date();
this.timeCreated = newTime.getTime();
}
public boolean equals(final Object o) {
if (this == o) return true;
if (!(o instanceof M3Session)) return false;
final M3Session m3Session = (M3Session) o;
return !(key != null ? !key.equals(m3Session.key) : m3Session.key != null);
}
public int hashCode() {
return key != null ? key.hashCode() : 0;
}
public String toString() {
return "M3Session{" +
"key='" + key + '\'' +
", timeCreated=" + timeCreated +
'}';
}
public boolean isValid() {
return key.length() != 0 && !hasExpired();
}
private boolean hasExpired() {
Date newTime = new Date();
return newTime.getTime() - this.timeCreated >= TIMEOUT;
}
public M3Session(final String key) {
this.setKey(key);
}
}
そして、これはそれを使用しているクラスです:
package com.transcel.m3.api;
/**
* @Author Marc Byfield
* Date: 9/10/12
* Time: 11:05 AM
*/
import com.transcel.m3.ir.M3Session;
import com.transcel.m3.ir.User;
import com.transcel.m3.transport.M3Connector;
import com.transcel.m3.transport.Operations;
import net.rim.device.api.system.PersistentObject;
import net.rim.device.api.system.PersistentStore;
import org.json.me.JSONObject;
import java.io.IOException;
import java.util.Hashtable;
public class Authentication implements Runnable {
private M3Session session;
private static PersistentObject store;
private User user;
public Authentication(String user, String pass) {
store = PersistentStore.getPersistentObject(M3Session.ID);
this.user = new User(user, pass);
session = (M3Session) store.getContents();
if (session == null || !session.isValid()) {
login(user, pass);
}
}
public M3Session getSession() {
return session;
}
private void login(String username, String pass) {
Hashtable user = new Hashtable(2);
user.put("username", username);
user.put("password", pass);
String result;
try {
result = M3Connector.sendRequest(Operations.LOGIN, user);
JSONObject sessionJSON = new JSONObject(result);
if (sessionJSON.has("session_key")) {
session = new M3Session(sessionJSON.getString("session_key"));
synchronized (store) {
store.setContents(session);
store.commit();
}
} else {
synchronized (store) {
store.setContents(null);
store.commit();
}
}
} catch (IOException ioe) {
synchronized (store) {
store.setContents(null);
store.commit();
}
}
}
public void run() {
if (!session.isValid())
login(user.getPhoneNum(), user.getPass());
try {
wait(M3Session.TIMEOUT);
} catch (InterruptedException ie) {
this.login(user.getPhoneNum(), user.getPass());
}
}
}
お役に立てれば