【问题标题】:Issue with JSONArray parsing [duplicate]JSONArray解析问题[重复]
【发布时间】:2013-12-16 13:28:37
【问题描述】:

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

还有其他价值观...

你能帮帮我吗?我已经三天了,我正在尝试解决解析...谢谢

【问题讨论】:

  • 您正在主线程上执行网络连接。这在 Android 中是不允许的。您必须使用 AsyncTask。 stackoverflow.com/questions/6343166/…
  • 你能解释一下我与一个例子有什么关系吗?
  • 网上有很多教程。我相信你会找到一个 =)

标签: java android arrays jsonobject


【解决方案1】:

因此,您需要在与 UI 不同的线程中获取 json 内容...然后对其进行解析。

您可以使用 Asynctask 和 HttpGetClient

或者

您可以使用 Android 异步 Http 客户端库。 非常简单的库,很小(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 库)

剩下的就靠你了!

【讨论】:

  • 我尝试了您的解决方案,但收到此异常:12-16 09:06:33.037: E/AsyncHttpRequest(1295): java.lang.SecurityException: Permission denied (missing INTERNET permission?)
  • 如例外所说,您必须在清单中添加 INTERNET 权限...在清单元素中添加
  • 添加了权限,但现在我有这个错误:12-16 18:17:22.368: E/AndroidRuntime(1150): java.lang.RuntimeException: Unable to instance application android.permission.INTERNET: java.lang.ClassNotFoundException:在路径上找不到类“android.permission.INTERNET”:DexPathList[[zip 文件“/data/app/com.example.mytabstest-1.apk”],nativeLibraryDirectories=[/data/ app-li‌​b/com.example.mytabstest-1, /system/lib]] 请帮忙:(
【解决方案2】:

Android 不允许您在主线程(GUI 线程)上执行慢速操作,这些操作包括网络活动等 IO 操作。

如果不是这种情况,并且您的 android 应用正在发布到在线服务,因为线程将忙于等待服务器响应,GUI 将锁定,并且用户输入将被忽略,直到线程完成发送和接收对 Web 服务的响应。如果这种情况持续太久,我认为大约 5 秒,您的应用程序会显示一条 ANR 消息(应用程序无响应)。这将允许用户等待,并希望您的应用程序恢复,或强制停止应用程序,这是最有可能的选择。

您还需要确保在您的项目 AndroidManifest 文件中包含 android:name="android.permission.INTERNET"

【讨论】:

  • 添加了 android:name="android.permission.INTERNET" 但应用程序因以下错误而崩溃:12-16 18:17:22.368: E/AndroidRuntime(1150): java.lang.RuntimeException: Unable实例化应用程序android.permission.INTERNET:java.lang.ClassNotFoundException:在路径上找不到类“android.permission.INTERNET”:DexPathList [[zip文件“/data/app/com.example.mytabstest-1.apk "],nativeLibraryDirectories=[/data/app-lib/com.example.mytabstest-1, /system/lib]]
  • 发布您的 AndroidManifestFile 以供任何人提供帮助
  • 谢谢,但我决定重写我的项目,包括一个用于解析 json 的类...如果我有什么问题,我会发布它...谢谢大家
猜你喜欢
  • 2011-05-02
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多