我在Android世界中再见了,我正试图从这个URL中检索一个JSONArray:http://www.softmarketing.it/json/view/azienda/7
TabHostExample.java:
public class TabHostExample extends TabActivity {
private static String url = "http://www.softmarketing.it/json/view/azienda/7";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tab_host_example);
//JSONParser parser= new JSONParser();
//JSONObject myJSON= parser.makeHttpRequest(url, "POST", null);
try{
// Create a new HTTP Client
DefaultHttpClient defaultClient = new DefaultHttpClient();
// Setup the get request
HttpGet httpGetRequest = new HttpGet("http://www.softmarketing.it/json/view/azienda/7");
// Execute the request in the client
HttpResponse httpResponse = defaultClient.execute(httpGetRequest);
// Grab the response
BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8"));
String json = reader.readLine();
// Instantiate a JSON object from the request response
JSONObject jsonObject = new JSONObject(json);
} catch(Exception e){
// In your production code handle any errors and catch the individual exceptions
e.printStackTrace();
}
.....
在LogCat中我看到了:
12-16 08:14:41.987: E/MYAPP(1183): exception: null
12-16 08:21:34.927: E/MYAPP(1245): exception: null
并且变量e具有以下值:
E: 原因: NetworkOnMainThreadEception
和其他人的价值......
你能帮帮我吗?我试图解决解析已经三天了...谢谢答案 0 :(得分:0)
因此,您需要在与UI不同的线程中获取json内容...然后解析它。
您可以使用Asynctask和HttpGetClient
或者
您可以使用 Android异步Http客户端库。 非常简单的lib,小巧的尺寸(25kb),易于使用和异步 代码将类似于:
AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.softmarketing.it/json/view/azienda/7", new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
// Here is your content !
// now you have to parse it
System.out.println(response);
}
});
可用here
然后,你必须根据需要解析文件。(如果是json格式,我建议你使用Gson库)
剩下的就在你身上!
答案 1 :(得分:0)
Android不允许您对主线程(GUI线程)执行慢速操作,这些操作包括网络活动等IO操作。
如果不是这种情况并且您的Android应用程序发布到在线服务,因为线程将忙于等待服务器响应,GUI将锁定,并且用户输入将被忽略,直到线程完成发送和接收对Web服务的响应。如果这种情况持续太久,我认为大约5秒钟,您的应用程序将显示ANR消息(应用程序无响应)。这将允许用户等待,并希望您的应用程序恢复,或强制停止应用程序,这是最可能的选项。
您还需要确保项目AndroidManifest文件中包含android:name="android.permission.INTERNET"
。