2012-06-03 3 views
1

Android 프로젝트에서 제출 된 양식 데이터 맵을 기본 Activity 클래스에서 asyncTask를 확장하는 두 번째 클래스로 보내려고합니다. 성공적으로 첫 번째 요소를 테스트하고 그 작업을 위해 내 클래스에 책임이있는 폼 데이터를 전송,배열 데이터 맵 읽기

Map<String, String> formData = new HashMap<String, String>(); 
formData.put("name", formName.getText().toString()); 
formData.put("test", "TESTING"); 

//formData.get("name"); - this test works 

Connection connection = new Connection(); 
connection.execute(formData); 

데이터의 내지도를 설정 : 내 주요 활동에서

, 나는 다음과 같은 코드 조각을 별도의 스레드에있는 데이터.

는하지만, 내 비동기 클래스에서, 다음 코드와 함께 :

public class Connection extends AsyncTask<Map, Void, Void> { 
    @Override 
    protected Void doInBackground(Map... data) { 
     // TODO Auto-generated method stub 
     Log.i("TEST", "NEW THREAD FIRING !!!"); 
     Log.d("DATA", data.get("name")); 

     return null; 
    } 

} 

내 두 번째 로그 호출이 이름 배열지도의 요소하지만 내 "데이터"를 추출하기 위해 시도하는 개체가 아니오로 인식하지 않습니다 내가 통과 한지도

누군가가 도와 줄 수 있습니까?

+0

을 당신은 즉' "의 배열,"'(지도 ... 데이터)' "메소드 매개 변수로이 지도' ": s. 'data [0] .get ("name")'시도해보십시오. – Jens

답변

1

doInBackground() 메서드는 varargs 매개 변수를 사용합니다. 즉, 한 번에 여러 유형을 전달할 수 있습니다.

이 경우 두 개 이상의지도가 전달 될 수 있습니다.이 경우에도 실제로는 하나의 IS 만 전달됩니다. AsyncTask's execute 방법을 통해 호출을 시작했기 때문에이 사실을 알 수 있습니다. 메서드 시그니처에 ...이 있습니까? 즉, 여러 개의 Map 개체를 전달할 수 있습니다.

Connection connection = new Connection(); 
connection.execute(formData1, formData2, formData3); 

당신은 인덱서와 함께, 당신은 그 어떤 array 객체 인 것처럼 내에서 값을 액세스 할 수 있습니다.

이 같이하는 코드를 변경하면 내가 믿고, 그것을 작동합니다 :

@Override 
protected Void doInBackground(Map... data) { 
    // TODO Auto-generated method stub 
    Log.i("TEST", "NEW THREAD FIRING !!!"); 
    Map myMap = data[0]; 
    Log.d("DATA", myMap.get("name")); 

    return null; 
} 
+0

고맙습니다. – sisko