[英]layout an XML website on my Android APP
我一直在尋找很長時間來回答我的簡單問題,但尚未找到答案。
我剛剛開始Android開發,因此無法將這個簡單的XML布局到我剛創建的Android應用程序中。
有我的代碼:
public class MainActivity extends Activity {
private static final String TAG = null;
/** Called when the activity is first created. */
private String getPage() {
String str = null ;
Log.v(TAG, "testentreemethode");
try
{
HttpClient hc = new DefaultHttpClient();
Log.v(TAG, "testnew");
HttpPost post = new HttpPost("http://www.3pi.tf/test.xml");
Log.v(TAG, "testurl");
HttpResponse rp = hc.execute(post);
Log.v(TAG, "testpost");
if(rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
{
str = EntityUtils.toString(rp.getEntity());
}
}catch(IOException e){
e.printStackTrace();
}
return str;
}
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView txt = (TextView) findViewById(R.id.textview1);
Log.v(TAG, "test1");
txt.setText(getPage());
Log.v(TAG, "test2");
}
}
如您所見,我放置了一些Logcat來查看“光標”的位置,並且它無法通過以下行:
HttpResponse rp = hc.execute(post);
有人能幫助我嗎?
無法在主線程上執行網絡操作。 使用AsyncTask在單獨的線程上執行它,如下所示:
public class GetXmlTask extends AsyncTask<Void, Void, String> {
// WeakReferences are used to prevent memory leaks.
// Always use WeakReferences when referencing Views or Activities or a Context from a seperate thread
private final WeakReference<TextView> textViewReference;
private final String url;
public GetXmlTask(TextView textView, String url) {
this.textViewReference = new WeakReference<TextView>(textView);
this.url = url;
}
@Override
protected String doInBackground(Void... params) {
HttpClient hc = new DefaultHttpClient();
Log.v(TAG, "testnew");
HttpPost post = new HttpPost(url);
Log.v(TAG, "testurl");
HttpResponse rp = hc.execute(post);
Log.v(TAG, "testpost");
if(rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
{
return EntityUtils.toString(rp.getEntity());
}
return "Error";
}
@Override
protected void onPostExecute(String result) {
TextView textView = textViewReference.get();
if(textView != null) {
textView.setText(result);
}
}
}
您可以執行以下任務:
GetXmlTask task = new GetXmlTask(textView, "http://www.3pi.tf/test.xml");
task.execute();
在任何應用程序中,都應避免在主線程上進行IO調用,因為它通常用於處理用戶事件和UI。 在Android中這樣做會導致NetworkOnMainThreadException
嘗試將您的網絡呼叫移至后台線程,它應該可以工作。
前
public class MainActivity extends Activity {
TextView textView;
Handler mHandler;
private static final String TAG = null;
/** Called when the activity is first created. */
private String getPage() {
String str = null ;
Log.v(TAG, "testentreemethode");
try
{
HttpClient hc = new DefaultHttpClient();
Log.v(TAG, "testnew");
HttpPost post = new HttpPost("http://www.3pi.tf/test.xml");
Log.v(TAG, "testurl");
HttpResponse rp = hc.execute(post);
Log.v(TAG, "testpost");
if(rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
{
str = EntityUtils.toString(rp.getEntity());
}
}catch(IOException e){
e.printStackTrace();
}
return str;
}
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtView = (TextView) findViewById(R.id.textview1);
mHandler = new Handler();
new Thread(){
@Override
public void run(){
final String str = getPage();
mHandler.post(new Runnable(){
@Override
public void run(){
textView.setText(str);
}
});
}
}.start();
Log.v(TAG, "test1");
Log.v(TAG, "test2");
}
}
請看一下本教程,以更好地了解android threadining。 教程
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.