2012-03-23 57 views
0

我跟着这个教程AsyncTask并得到以下错误日志:的Android UnknownHost中的AsyncTask - 加载网页

03-23 11:44:42.936: WARN/System.err(315): java.net.UnknownHostException: www.google.co.in 
03-23 11:44:42.936: WARN/System.err(315):  at java.net.InetAddress.lookupHostByName(InetAddress.java:513) 
03-23 11:44:42.936: WARN/System.err(315):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:278) 
03-23 11:44:42.936: WARN/System.err(315):  at java.net.InetAddress.getAllByName(InetAddress.java:242) 
03-23 11:44:42.936: WARN/System.err(315):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136) 
03-23 11:44:42.936: WARN/System.err(315):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)  
03-23 11:44:42.936: WARN/System.err(315):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
03-23 11:44:42.936: WARN/System.err(315):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348) 
03-23 11:44:42.936: WARN/System.err(315):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
03-23 11:44:42.936: WARN/System.err(315):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
03-23 11:44:42.944: WARN/System.err(315):  at org.apache.http.impl.client.AbstractHttpC lient.execute(AbstractHttpClient.java:465) 
03-23 11:44:42.944: WARN/System.err(315):  at com.test.async.AsyncTaskExampleActivity$DownloadWebPageTask.doInBackground (AsyncTaskExampleActivity.java:36) 
03-23 11:44:42.944: WARN/System.err(315):  at com.test.async.AsyncTaskExampleActivity$DownloadWebPageTask.doInBackground (AsyncTaskExampleActivity.java:1) 
03-23 11:44:42.944: WARN/System.err(315):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
03-23 11:44:42.944: WARN/System.err(315):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
03-23 11:44:42.944: WARN/System.err(315):  at java.util.concurrent.FutureTask.run (FutureTask.java:137) 
03-23 11:44:42.944: WARN/System.err(315):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 
03-23 11:44:42.944: WARN/System.err(315):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 
03-23 11:44:42.944: WARN/System.err(315):  at java.lang.Thread.run(Thread.java:1096) 

如何解决呢?

我的代码:

public class AsyncTaskExampleActivity extends Activity { 
    private TextView textView; 

    /** Called when the activity is first created. */ 
     @Override 
      public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      textView = (TextView) findViewById(R.id.TextView01); 
    } 

    private class DownloadWebPageTask extends AsyncTask<String, Void, String> { 
     @Override 
     protected String doInBackground(String... urls) { 
      String response = ""; 
      Log.i("", "in doInBackgroundddddddddd.........."); 
      Log.i("", "in readWebpageeeeeeeeeeeee"); 
      /* 
      * try { InetAddress i = 
      * InetAddress.getByName("http://google.co.in"); } catch 
      * (UnknownHostException e1) { e1.printStackTrace(); } 
      */ 
      for (String url : urls) { 
      Log.i("", "in for looooooop doInBackgroundddddddddd.........."); 
      DefaultHttpClient client = new DefaultHttpClient(); 
      HttpGet httpGet = new HttpGet(url); 
      try { 
       Log 
         .i("", 
           "afetr for looooooop try doInBackgroundddddddddd.........."); 
       HttpResponse execute = client.execute(httpGet); 
       Log 
         .i("", 
           "afetr for looooooop try client ..execute doInBackgroundddddddddd.........."); 
       InputStream content = execute.getEntity().getContent(); 

       BufferedReader buffer = new BufferedReader(
         new InputStreamReader(content)); 
       String s = ""; 
       while ((s = buffer.readLine()) != null) { 
        response += s; 
        Log 
          .i("", 
            "afetr while looooooop try client ..execute doInBackgroundddddddddd.........."); 
       } 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     Log 
       .i("", 
         "afetr lasttttttttttttt b4 response doInBackgroundddddddddd.........."); 
     return response; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     Log.i("", "in onPostExecuteeee.........."); 
     textView.setText(result); 
    } 
} 

public void readWebpage(View view) { 
    /* 
    * System.setProperty("http.proxyHost", "10.132.116.10"); 
    * System.setProperty("http.proxyPort", "3128"); 
    */ 

    DownloadWebPageTask task = new DownloadWebPageTask(); 
    task.execute(new String[] { "http://google.co.in" }); 
    Log.i("", "in readWebpageeeeeeeeeeeee after execute.........."); 

} 

}

的main.xml:

<Button android:id="@+id/readWebpage" android:layout_width="match_parent" 
    android:layout_height="wrap_content" android:onClick="readWebpage" 
    android:text="Load Webpage"> 
</Button> 

<TextView android:id="@+id/TextView01" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:text="Example Text"> 
</TextView> 

清单:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.test.async" android:versionCode="1" android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="8" /> 
    <uses-permission android:name="android.permission.INTERNET"></uses-permission> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".AsyncTaskExampleActivity" 
     android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

</application> 

感谢
斯纳

+0

异常消息看起来很清楚:主机google.co.in无法访问。请先尝试从Android手机/模拟器上的浏览器访问它。另一个要尝试的是有/无“www”和“http” – curioustechizen 2012-03-23 06:26:20

+0

的组合,我尝试了所有这些。我可以通过浏览器访问它,但不能以编程方式访问它。 – Smitha 2012-03-23 06:35:31

+0

没有为我工作:-(即使重新启动模拟器 – Smitha 2012-03-23 07:00:06

回答

0

呼叫之前,下面两行只需添加到网页:

try { InetAddress i = InetAddress.getByName("YourDesiredURL"); } 
catch (UnknownHostException e1) { e1.printStackTrace(); } 

你并不需要捕捉任何异常与此,只需在您的网络电话之前执行它。 欲了解更多信息,请阅读this

+0

没有ü意味着这个?公共无效readWebpage(查看视图){ \t \t /*System.setProperty("http.proxyHost “” 10.132。 116.10 “); \t \t System.setProperty(” 把http.proxyPort”, “3128”); */ \t \t Log.i( “”, “在readWebpageeeeeeeeeeeee”); \t \t尝试{ \t \t \t InetAddress i = InetAddress.getByName(“http://google.co.in”); \t \t} catch(UnknownHostException e1){ \t \t \t e1.printStackTrace(); \t \t \t} \t \t DownloadWebPageTask task = new DownloadWebPageTask(); \t \t task.execute(new String [] {“http://google.co.in”}); \t \t Log.i(“”,“in readWebpageeeeeeeeeeeeeee after execute ..........”); \t} – Smitha 2012-03-23 07:54:04

+0

只需添加上述在doInBackground两行()方法的异步任务 – waqaslam 2012-03-23 07:58:53

0

想你的代码,并得到了同样的错误,解决错误, 我更换的代码,

HttpGet httpGet = new HttpGet(url); 
HttpResponse execute = client.execute(httpGet); 

两行,

HttpPost httppost = new HttpPost(url); 
HttpResponse execute = client.execute(httppost); 

编辑:

另外创建HttpClient对象之后加入此行。

HttpConnectionParams.setConnectionTimeout(client.getParams(), 
         20000); // Timeout Limit 
+0

张贴问题的代码工作很好.. – user370305 2012-03-23 09:38:14

+0

但在我的模拟器得到了UHE错误,并更换上面一行的错误解决 – MKJParekh 2012-03-23 09:39:50

+0

即使这不适合我! – Smitha 2012-03-23 09:40:30

0

转到Windows命令提示符知道谷歌IP地址。 输入“ping www.google.com” 您将获得google的ip,然后使用ip代替google的网址。 如果网络连接可用,你有权利清单的许可,则这一步必须帮助你... 玩得开心

这是代码 -

使用此IP,而不是www.google.co .in,因为本地机器中的模拟器无法将网址转换为相应的IP地址。如果您使用的是连接到代理服务器的计算机,则不会出现此问题。你的设备能够运行这个应用程序。 此ip转换仅适用于此模拟器。

public static String GOOGLE_IP = "http://74.125.236.183"; 

public static String getContent(String url) throws Exception { 
    return(new Scanner(new URL(url).openConnection().getInputStream()).useDelimiter("/z").next()); 
}