安卓应用程序获取互联网数据



这是我运行此代码时从互联网 bu 获取数据的 android 代码,不显示任何数据

public class data 
    {
    public String a()throws Exception
    {
        String data=null;
        BufferedReader b=null;
        try
        {
            HttpClient ob=new DefaultHttpClient();
            URI website=new URI("http://www.mybringback.com");
            HttpGet request=new HttpGet();
            request.setURI(website);
            HttpResponse response= ob.execute(request);
            b=new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
            StringBuffer bu=new StringBuffer ();
            String i = null;
            while((i=b.readLine())!=null)
            {
                bu.append(i);
            }
            b.close();
            data=bu.toString();
            return data;
        }finally
        {
            if (b!=null)
            {
                try {
                    b.close();
                    return data;

                }catch(Exception e)
                {
                    e.printStackTrace();
                }
            }
        }
        }
}

我的主要课程

package com.example.hello;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import java.io.*;
import java.net.URI;
public class MyActivity extends Activity
 {
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    TextView m =(TextView)findViewById(R.id.de);
    data ob=new data();
    try {
        String v= ob.a();
        m.setText(v);
    } catch (Exception e) {
        e.printStackTrace();
    }
  }
 }

我的 xml 文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">
<ScrollView 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent">
 <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Hello World, MyActivity"
    android:id="@+id/de">
 </TextView>
 </ScrollView>
</LinearLayout>

您正在 ui 线程上运行与网络相关的操作。可能NetworkOnMainThreadException.使用 ThreadAsynctask

http://developer.android.com/reference/android/os/AsyncTask.html

如果网络操作持续时间较短,请使用Asynctask

您可以在 onPostExecute 中将内部类Asynctask设置为更新 UI。

还要遵循 java 命名约定并重命名变量和方法,这有助于提高可读性

例:

public class MyActivity extends Activity
{
TextView m;  
@Override
public void onCreate(Bundle savedInstanceState)
{
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   m=(TextView)findViewById(R.id.de);
   new TheTask().execute()
}
class TheTask extends AsyncTask<Void,Void,String>
{
   String  _response=null;   
@Override
protected String doInBackground(Void... params) {
    // TODO Auto-generated method stub
     try
     {
       HttpClient ob=new DefaultHttpClient();
       URI website=new URI("http://www.mybringback.com");
       HttpGet request=new HttpGet();
       request.setURI(website);
       HttpResponse response= ob.execute(request);
       HttpEntity resEntity = response.getEntity();
       _response=EntityUtils.toString(resEntity); 
     }catch(Exception e)
     {
         e.printStackTrace();
     }
    return _response;
}
@Override
protected void onPostExecute(String result) {
    // TODO Auto-generated method stub
    super.onPostExecute(result);
            m.setText(result);
}
    }
}

最新更新