所以我有一个问题,为什么我的函数 getIt()
在 httpGet
中断并给出 Exception
,在 list 中我添加了 互联网
许可!我没有使用 AsyncTask,因为我需要创建一个新类,如果我用 get
调用 AsyncTask,它会阻塞我的 UI
类.java
public class loadMovies{
public String getIt(){
InputStream ips = null;
JSONObject json = null;
String get = "";
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://mysite/app/movies");
try {
HttpResponse response = client.execute(httpGet);
ips = response.getEntity().getContent();
BufferedReader buffer = new BufferedReader(new InputStreamReader(ips));
StringBuilder builder = new StringBuilder();
String line;
while((line = buffer.readLine()) != null){
builder.append(line+"\n");
}
json = new JSONObject(builder.toString());
Log.d(TAG, json.toString());
}
catch(Exception e){ e.printStackTrace(); }
if(json != null){
JSONArray array = json.optJSONObject("data").optJSONArray("movies");
for(int i = 0; i < array.length(); i++){
JSONObject rss = array.optJSONObject(i);
get += rss.optString("name")+"\n";
}
}
return get;
}
}
最佳答案
您的应用程序在 Android 3.0 及更高版本上崩溃的原因是因为 HoneyComb、Ice Cream Sandwich 和 JellyBean 对 UI 线程的滥用更加严格。例如,当运行 HoneyComb 或以上版本的 Android 设备在 UI 线程上检测到网络访问时,将抛出 NetworkOnMainThreadException:
E/AndroidRuntime(673): java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example/com.example.ExampleActivity}: android.os.NetworkOnMainThreadException
关于为什么会发生这种情况的解释在 Android 开发者网站上有详细记录:
A NetworkOnMainThreadException is thrown when an application attempts to perform a networking operation on its main thread. This is only thrown for applications targeting the Honeycomb SDK or higher. Applications targeting earlier SDK versions are allowed to do networking on their main event loop threads, but it's heavily discouraged.
ICS 和 HoneyComb 不允许您在 UI 线程上执行的其他操作的一些示例是:
- 打开 Socket 连接(即 new Socket())。
- HTTP 请求(即 HTTPClient 和 HTTPUrlConnection)。
- 正在尝试连接到远程 MySQL 数据库。
- 下载文件(即 Downloader.downloadFile())。
如果您试图在 UI 线程上执行任何这些操作,则必须将它们包装在工作线程中。最简单的方法是使用 AsyncTask,它允许您在用户界面上执行异步工作。 AsyncTask 将在工作线程中执行阻塞操作,并将结果发布到 UI 线程上,而不需要您自己处理线程和/或处理程序。
关于Android加载一些数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14173563/