2012-10-27 33 views
1

也許你可以幫助我。我正在開發一個Android應用項目,該項目調用了返回JSON數據的Rotten Tomatoes API。但是,每當我運行我的代碼時,應用程序崩潰。給我的問題的特定位代碼是httpClient.execute(httpPost);httpClient.execute(httpPost)導致崩潰(Android 4.1)

傳遞給方法的url字符串很好,並且在我的瀏覽器中輸入它時會返回正確的數據,所以我知道這不是問題。我有點不知所措。我從來沒有遇到過HttpClient的問題,儘管過去我只使用過XML,從來沒有JSON。

我一直在努力與此一段時間了。如果有人有任何見解,將不勝感激。

public JSONObject getJSON(String url) { 
    //Make HTTP Request 
    try { 

     //defaultHttpClient 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 
     //Log.d("RunTest", url); 
     HttpResponse httpResponse = httpClient.execute(httpPost); // THIS LINE CAUSES APPLICATION TO CRASH 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     is = httpEntity.getContent(); 

    } catch (UnsupportedEncodingException uee) { 
     Log.d("Exceptions", "UnsupportedEncodingException"); 
     uee.printStackTrace(); 
    } catch (ClientProtocolException cpe) { 
     Log.d("Exceptions", "ClientProtocolException"); 
     cpe.printStackTrace(); 
    } catch (IOException ioe) { 
     Log.d("Exceptions", "IOException"); 
     ioe.printStackTrace(); 
    } 

10-27 02:52:44.484: I/Choreographer(627): Skipped 147 frames! The application may be doing too much work on its main thread. 
10-27 02:52:44.704: W/dalvikvm(627): threadid=12: thread exiting with uncaught exception (group=0x40a13300) 
10-27 02:52:44.724: E/AndroidRuntime(627): FATAL EXCEPTION: AsyncTask #1 
10-27 02:52:44.724: E/AndroidRuntime(627): java.lang.RuntimeException: An error occured while executing doInBackground() 
10-27 02:52:44.724: E/AndroidRuntime(627): at android.os.AsyncTask$3.done(AsyncTask.java:299) 
10-27 02:52:44.724: E/AndroidRuntime(627): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
10-27 02:52:44.724: E/AndroidRuntime(627): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
10-27 02:52:44.724: E/AndroidRuntime(627): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
10-27 02:52:44.724: E/AndroidRuntime(627): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
10-27 02:52:44.724: E/AndroidRuntime(627): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
10-27 02:52:44.724: E/AndroidRuntime(627): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
10-27 02:52:44.724: E/AndroidRuntime(627): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
10-27 02:52:44.724: E/AndroidRuntime(627): at java.lang.Thread.run(Thread.java:856) 
10-27 02:52:44.724: E/AndroidRuntime(627): Caused by: java.lang.IllegalStateException: Target host must not be null, or set in parameters. scheme=null, host=null, path=api.rottentomatoes.com/api/public/v1.0/lists/movies/box_office.json 
10-27 02:52:44.724: E/AndroidRuntime(627): at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:591) 
10-27 02:52:44.724: E/AndroidRuntime(627): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:293) 
10-27 02:52:44.724: E/AndroidRuntime(627): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
10-27 02:52:44.724: E/AndroidRuntime(627): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
10-27 02:52:44.724: E/AndroidRuntime(627): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
10-27 02:52:44.724: E/AndroidRuntime(627): at com.example.rottentomatoesclient.JSONParser.getJSON(JSONParser.java:39) 
10-27 02:52:44.724: E/AndroidRuntime(627): at com.example.rottentomatoesclient.MoviesActivity$getMovieList.doInBackground(MoviesActivity.java:90) 
10-27 02:52:44.724: E/AndroidRuntime(627): at com.example.rottentomatoesclient.MoviesActivity$getMovieList.doInBackground(MoviesActivity.java:1) 
10-27 02:52:44.724: E/AndroidRuntime(627): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
10-27 02:52:44.724: E/AndroidRuntime(627): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
10-27 02:52:44.724: E/AndroidRuntime(627): ... 5 more 
10-27 02:52:44.774: W/ActivityManager(148): Force finishing activity com.example.rottentomatoesclient/.MoviesActivity 
+0

告訴我們您的LogCat錯誤 – juned

+0

我從來沒有得到任何LogCat錯誤。沒有任何異常會引發。 – Chris

+0

你給了'Internet'權限嗎? – Praveenkumar

回答

1

OK,你的網址可能是正確。在你的長期疊跡線的中間,你可以找到這樣的:

Caused by: java.lang.IllegalStateException: 
Target host must not be null, or set in parameters. scheme=null, host=null, 
path=api.rottentomatoes.com/api/public/v1.0/lists/movies/box_office.json 

這看起來像是從服務器返回的錯誤 - 你沒有提供所有paramterers。

+0

好吧,我是個白癡。我忽略了將「http://」添加到url字符串中。顯然這是至關重要的。這也解釋了爲什麼當我將網址粘貼到瀏覽器的地址欄時它工作正常。無論如何,它現在似乎工作得很好。感謝所有的幫助。 – Chris