저는 비교적 새로운 Android 개발자이며이를 수행하는 방법을 이해할 수 없습니다. 나는 모든 포럼을 조사해 왔으며, 나는 약간의 진보를 이루었지만 아직도 여기 있습니다. 그래서 내가하고 싶은 것은 POST 요청을 웹 페이지에 보내고 (하나의 POST 인수 만 전송 함) 결과를 문자열로 반환하는 공통 함수입니다. 나는Async로 HttpPost 보내기 및 문자열 결과 받기
public class AppActivity extends Activity {
HTTPPostData PostData = new HTTPPostData("id");
PostData.execute();
txtLabel.setText(PostData.Result);
}
여기에 메인 쓰레드를하고 난
public class HTTPPostData extends AsyncTask<String, Long, Object> {
String Value = null;
String Result = null;
public HTTPPostData(String query) {
Value = query;
}
@Override
protected String doInBackground(String... params) {
byte[] Bresult = null;
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://www.mypage.com/script.php");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("cmd", Value));
post.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
HttpResponse response = client.execute(post);
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() == HttpURLConnection.HTTP_OK){
Bresult = EntityUtils.toByteArray(response.getEntity());
Result = new String(Bresult, "UTF-8");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (Exception e) {
}
return Result;
}
}
내가 같은 활동 안에 (이 기능을 여러 번 사용하거나 같은 다른 활동들과 공유하고 싶은 내 HTTPPostData 비동기 클래스가 신청). 나는이 순간에 조금 엉망이되어 당신의 도움이 필요합니다. 내가 이해하는 것은 doInBackground()가 끝나기 전에 결과를 묻는 것이고, 나는 빈 결과를 얻는다.
이에 관해서는 당신의 도움이
응용 프로그램의 상황에 따라 공통된 클래스를 사용하는 것이 좋겠지 만 이제는 각각에 대해 비동기 클래스를 만들어야합니다. 예를 들어 숫자를 가져 와서 SharedPrefferences에 저장된 다른 항목과 비교 한 다음 문자열을 가져 와서 일부 TextView에 표시하려면 이러한 작업 각각에 대해 거의 동일한 코드가 포함 된 별도의 클래스를 만들어야합니다. . 아시다시피 비동기 클래스는 두 번 만들 수 없습니다. – ali
@ali 나는 모든 Http-to-String 항목을 일반적인 유틸리티 함수에 넣었다. 그런 다음 인터넷 데이터를 얻고 자하는 각 장소에 공통 함수를 호출하는 barebone AsyncTask를 만든 다음 콜백 결과를 설명한다. onPostExecute에서 원한다. 아마도 여러 종류의 asynctask를 작성하는 데 낭비되는 느낌을 갖지만, 각각 다른 콜백을 수행해야합니다. 어쩌면 깨끗한 방법이 있을지 모르겠지만 확실하지 않습니다. 어쩌면 당신은 하나의 추상 asynctask 클래스를 생성 한 다음 그것을 사용하고자하는 모든 장소에서 onPostExecute를 재정의 할 수 있습니다. – Tim
그게 내가 한거야. 감사! – ali