2017-08-04 120 views
0

我的代碼如下所示:HTTP客戶端給目標主機不能爲空錯誤

public class YActivity extends AppCompatActivity { 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
try { 
      Log.d(TAG, "onCreate: page response" + getResponseFromUrl("www.iammjet.in")); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
} 

public String getResponseFromUrl(String url) throws IOException { 
     HttpClient httpclient = new DefaultHttpClient(); // Create HTTP Client 
     HttpGet httpget = new HttpGet(URL); // Set the action you want to do 
     HttpResponse response = httpclient.execute(httpget); // Executeit 
     HttpEntity entity = response.getEntity(); 
     InputStream is = entity.getContent(); // Create an InputStream with the response 
     BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     while ((line = reader.readLine()) != null) 
      sb.append(line); 

     String resString = sb.toString(); 

     is.close(); 
     return resString; 
    } 


} 

現在發生的事情在這裏是它給了我Target host must not be null, or set in parameters. scheme=null, host=null, path=www.iammjet.in錯誤,我應該怎麼插入,使其工作?

我使用compileSdkVersion 24.支持的HttpClient我在我的build.gradle補充如下:如下圖所示

android { 
    compileSdkVersion 24 
    buildToolsVersion "25.0.1" 
    useLibrary 'org.apache.http.legacy' 
} 

我的錯誤堆棧跟蹤:

java.lang.RuntimeException: Unable to start activity ComponentInfo{demand.inn.com.xyz.staging/demand.inn.com.xyz.activity.YActivity}: android.os.NetworkOnMainThreadException 
                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 
                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
                        at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                        at android.os.Looper.loop(Looper.java:135) 
                        at android.app.ActivityThread.main(ActivityThread.java:5254) 
                        at java.lang.reflect.Method.invoke(Native Method) 
                        at java.lang.reflect.Method.invoke(Method.java:372) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
                       Caused by: android.os.NetworkOnMainThreadException 
                        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147) 
                        at java.net.InetAddress.lookupHostByName(InetAddress.java:418) 
                        at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) 
                        at java.net.InetAddress.getAllByName(InetAddress.java:215) 
                        at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:142) 
                        at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:169) 
                        at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:124) 
                        at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:365) 
                        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:560) 
                        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:492) 
                        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:470) 
                        at demand.inn.com.quflip.activity.YActivity.getResponseFromUrl(YActivity.java:328) 
                        at demand.inn.com.quflip.activity.QuFlipActivity.onCreate(QuFlipActivity.java:94) 
                        at android.app.Activity.performCreate(Activity.java:5990) 
                        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)  
                        at android.app.ActivityThread.access$800(ActivityThread.java:151)  
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)  
                        at android.os.Handler.dispatchMessage(Handler.java:102)  
                        at android.os.Looper.loop(Looper.java:135)  
                        at android.app.ActivityThread.main(ActivityThread.java:5254)  
                        at java.lang.reflect.Method.invoke(Native Method)  
                        at java.lang.reflect.Method.invoke(Method.java:372)  
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)  
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)  


                       --------- beginning of crash 
+0

嘗試在URL之前添加'http://' –

+0

另外這是一種在android上執行http的舊方法,並且(不幸)不再支持。 Android的版本是你的建築? –

+0

complieSdkVersion 24 buildTools版本25.0.1 –

回答

2

您的代碼有三個主要問題:

  1. 您的網址格式錯誤(給錯誤)
  2. 你正在做networking on the main thread
  3. 您嘗試使用從更高版本的Android被刪除的客戶端庫。如果可以,請使用URLConnection

格式化你的URL

您的瀏覽器你撒謊。 www.iammjet.in不是網址。這只是一個主機名。要成爲一個URL,你必須有一個方案,主機和路徑(如錯誤告訴你。

http://www.iammjet.in/是有效的。它有計劃http,主機www.iammjet.in和路徑/,因爲你給它只是它曲解了主機名它只是路徑,並說主機名爲空

+0

我試過了,但問題仍然存在 –

+0

您是否注意到'HttpGet httpget = new HttpGet(URL);'沒有引用您的參數'url',而是一個完全不同的常量, URL'? –

+0

我甚至用'url'試過,但它仍然不起作用 –

0

通「http://www.iammjet.in 「而不是」www.iammjet.in「

+0

不,問題依然存在 –

+0

bcaz你的網址在瀏覽器中沒有打開..我想 –

+0

我甚至用http:// www .google.com,但仍然錯誤仍然存​​在 –