는 PHP 스크립트의 몇 가지 정보를 잡고, 내 전화에 표시하는 다음 코드를 참조하십시오 안드로이드 코드에 도입 된 모든 종류의 루프 :main.xml에가로드되지 때
package room.temperature;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class RoomTemperatureActivity extends Activity {
String result = null;
StringBuilder sb=null;
TextView TemperatureText, DateText;
ArrayList<NameValuePair> nameValuePairs;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TemperatureText = (TextView) findViewById(R.id.temperature);
DateText = (TextView) findViewById(R.id.date);
nameValuePairs = new ArrayList<NameValuePair>();
}
@Override
public void onResume() {
super.onResume();
//setValues();
for (int i = 0; i < 10; i++) {
setValues();
}
}
public void setValues() {
InputStream is = null;
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://mywebsite.com/tempscript.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}
catch(Exception e) {
Log.e("log_tag", "Error in http connection" + e.toString());
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
sb = new StringBuilder();
sb.append(reader.readLine());
is.close();
result=sb.toString();
}
catch(Exception e) {
Log.e("log_tag", "Error converting result " + e.toString());
}
System.out.println(result);
String[] values = result.split("&");
TemperatureText.setText(values[0]);
DateText.setText(values[1]);
}
}
이 코드 for 루프를 주석 처리하고 setValues()
을 한 번 호출하면 좋습니다. 그러나 루프를 도입하자마자 루프가 완료 될 때까지 main.xml
(또는 화면의 모든 내용)이로드되지 않습니다. 활동 라이프 사이클과 관련이 있다고 생각했지만 어디에서 코드를 작성했는지에 상관없이 단순히 올바르게 작동하지 않습니다. 기본적으로 setValues()
을 호출 할 때마다 값이 계속 업데이트되기를 원합니다. 10 반복 루프는 개념을 테스트하기위한 것입니다.
이 http://www.vogella.com/articles/AndroidPerformance/article.html를 참조하지만 루프를 주석 때 왜 작동합니까? 루프가 상황을 어떻게 바꾸나요? 감사. – capcom
예외는 무엇입니까? 또한 Log.e를 할 때 세 번째 매개 변수 인 예외 객체 자체를 전달하면 스택 추적을 얻을 수 있습니다 .. Log.e (TAG, e.getMessage(), e); –
어디에도 예외는 아니며 루프가 완료 될 때까지 레이아웃이로드되지 않습니다. 감사. – capcom