2010-04-30 1 views
1

기본적으로 쇼핑 목록을 PHP 파일에 업로드하고 다른 모든 사용자가 만든 업데이트를 다운로드하는 쇼핑 목록 응용 프로그램을 만들고 있습니다. 그 목록. 내가/기록을 열거하고 항목 객체Java Micro Edition - 스레드 및 위임자 (UI 업데이트 방법)를 사용한 HTTP 송수신

승 레코드 저장소를 사용하고

기본적으로 내가 스레드를 사용하여 PHP 파일에 레코드 저장소에서 모든 요소를 ​​보낼 수 있어야합니다. 문제는 다음과 같습니다. 레코드 저장소를 스레드에 전달해야합니까? 어떻게 데이터를 다시 가져 와서 레코드 저장소를 업데이트합니까?

현재 내 송신 데이터 클래스가 주 MIDlet의 레코드 저장소를 업데이트하는 방법을 볼 수 없습니다. 사전

EDI

public GetDataClass(Midlet parentMidlet, String URL, RecordStore tempRecordStore) 
{ 
    try 
    { 
     populateLocalRecordStore(tempRecordStore); 
     this.parentMidlet = parentMidlet; 
     this.URL = URL; 
    } 
    catch(Exception e) 
    { 
     System.out.println(e.toString()); 
    } 
} 

채우기 기록 저장소가 통과 된 레코드 저장소를 받아 말 그대로 모든 레코드를 반복하고 로컬 RS에 삽입에서

감사합니다. 문제는 내가/RecordStore를 기본 폼에 데이터를 다시 전달하려는 경우에서 오는

편집 전에서 반환 된 내용 (스레드 내에서 기본 폼에서 레코드 저장소를 업데이트하려면 어떻게

http 요청)

답변

1

제대로 이해한다면 (나에게 알려주세요) UI를 업데이트해야하는 백그라운드 스레드에서 반환 값을 얻을 수있는 방법을 알고 싶습니까? 로컬 레코드 저장소를 채우는 데 사용중인 스레드. 당신 GetDataClass이의 Runnable 경우

그래서, (로 만든 새로운 Thread (실행 가능))이 비슷한 할 수있다 : 당신이 Jarle이 말을 할 수

public class GetDataClass implements Runnable { 
    private Midlet parentMidlet; 
    private String URL; 
    private RecordStore tempRecordStore; 

public GetDataClass(Midlet parentMidlet, String URL, RecordStore tempRecordStore) { 
     this.parentMidlet = parentMidlet; 
     this.URL = URL; 
     this.tempRecordStore = tempRecordStore; 
} 

public void run() { 
    try { 
     returnData = populateLocalRecordStore(tempRecordStore); 
     parentMidlet.updateForm(returnData); 
    } catch(Exception e) { 
      // log and do exception handling 
    } 
} 
1

을하지만, 그 것만으로는 충분하지 않습니다.

주 스레드에서 : 당신이 동일한 레코드 저장소에 액세스 2 개 스레드가있는 경우, 당신은 액세스를 제어하기 위해 몇 가지 잠금 장치를 사용해야합니다 있도록 기록 저장, 스스로 동시성을 처리하지 못할

private Object lock = new Object(); 
public Object getLock() { 
    return lock; 
} 

public void retrieveDataFromRS() { 
    synchronized (getLock()) { 
     //read, edit, whatever your RS here and release the lock 
    } 
} 

에 당신의 GetDataClass 스레드 :

public void run() { 
    synchronized(parentMidlet.getLock()) { 
     //read, edit, whatever your RS here and release the lock 
    } 
} 

당신이 클래스 또는 자신의 스레드를 사용하여 동기화,하지만 당신은 프로그래머 더 많은 데이터까지 하나 개의 스레드를 중지 할 수 있습니다으로 잠금 객체를 생성하는 것은, 당신에게 더 많은 컨트롤을 제공하거나 사용하여 원하는 무엇이든 할 수 getLock(). 스레드가 기다리지 않도록 wait()합니다. 누군가가 잠금을 알리고 getLock.notify()를 호출하여 잠금을 기다리는 모든 스레드가 다시 실행되도록합니다.