无法在android中从internet检索数据

无法在android中从internet检索数据,android,networking,Android,Networking,我使用它连接到internet并检索页面源,非常简单: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_update_library); String data = ""; if(!isNetworkAvailable()){ Tex

我使用它连接到internet并检索页面源,非常简单:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_update_library);
    String data = "";

    if(!isNetworkAvailable()){
        TextView tv = (TextView) findViewById(R.id.placeholder);
        tv.setText("No Connection!!!");
        return;
    }

    try{
        URL url = null;
        url = new URL("http://google.com");
        URLConnection conn = url.openConnection();
        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line = "";
        while((line = reader.readLine()) != null){
            data += line;
        }
        TextView tv = (TextView) findViewById(R.id.placeholder);
        tv.setText(data);
    }catch(Exception e){
        TextView tv = (TextView) findViewById(R.id.placeholder);
        tv.setText("error : "+e.toString());
    }
}
但数据并不是从互联网上回来的。
有什么问题吗?

您需要将从internet检索数据的代码放在后台任务中,因此可以放在服务或异步任务中。

请尝试以下代码:-

TextView tv = (TextView) findViewById(R.id.placeholder);
if(!isNetworkAvailable()){

    tv.setText("No Connection!!!");
    new ChangePasswordAsyncTask().execute();
    return;
}


private class ConnectToServer extends AsyncTask<String, String, String>
{
    private String data;

    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... params)
    {

        try
        {
            // do stuff from server
                  URL url = null;
                  url = new URL("http://google.com");
                 URLConnection conn = url.openConnection();
                  BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                  String line = "";
                 while((line = reader.readLine()) != null){
                     data += line;
                 }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return data;
    }

    @Override
    protected void onProgressUpdate(String... values)
    {
        // TODO Auto-generated method stub
        super.onProgressUpdate(values);
    }

    @Override
    protected void onPostExecute(String result)
    {
        super.onPostExecute(result);
        // String jData = "";
        try
        {
            // set UI on this method

               tv.setText(data);
        }
        catch (Exception e)
        {
            e.printStackTrace();
            // Toast.makeText(context, jMessage, Toast.LENGTH_LONG).show();
        }
    }
}
TextView tv=(TextView)findViewById(R.id.placeholder);
如果(!isNetworkAvailable()){
tv.setText(“无连接!!!”);
新建ChangePasswordAsyncTask().execute();
返回;
}
私有类ConnectToServer扩展异步任务
{
私有字符串数据;
@凌驾
受保护的void onPreExecute()
{
super.onPreExecute();
}
@凌驾
受保护的字符串doInBackground(字符串…参数)
{
尝试
{
//从服务器执行任务
URL=null;
url=新url(“http://google.com");
URLConnection conn=url.openConnection();
BufferedReader=新的BufferedReader(新的InputStreamReader(conn.getInputStream());
字符串行=”;
而((line=reader.readLine())!=null){
数据+=行;
}
}
捕获(例外e)
{
e、 printStackTrace();
}
返回数据;
}
@凌驾
受保护的void onProgressUpdate(字符串…值)
{
//TODO自动生成的方法存根
super.onProgressUpdate(值);
}
@凌驾
受保护的void onPostExecute(字符串结果)
{
super.onPostExecute(结果);
//字符串jData=“”;
尝试
{
//在此方法上设置UI
tv.setText(数据);
}
捕获(例外e)
{
e、 printStackTrace();
//Toast.makeText(上下文,jMessage,Toast.LENGTH_LONG).show();
}
}
}

ue线程操作系统异步任务。ui线程上没有网络操作。你试过调试你的应用程序吗?@Raghunandan,主线程上不可能有互联网连接吗?我在教程中看到过@nikis,我已经试过调试了,但没有任何意义。它说按id查找视图不能用于异步任务!连接到服务器是一个单独的类吗?那个么什么是tv呢?我知道,但你们的意思是我在我的主类中声明并初始化tv,然后在另一个类中使用它(异步)?你们在同一个类上创建asyntask并全局初始化