无法在android中从internet检索数据
我使用它连接到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
@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并全局初始化