簡體   English   中英

在我的Android APP上布置XML網站

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM