JSONArray解析问题

时间:2013-12-16 13:28:38

标签: java android arrays jsonobject

我在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

和其他人的价值......

你能帮帮我吗?我试图解决解析已经三天了...谢谢

2 个答案:

答案 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"