android - Android Studio中解析Json数据 - 无法显示日志中的所有数据

标签 android json parsing android-studio

所以基本上我正在开发一个从 mysql 数据库检索数据的应用程序。因此,我创建了一个 php 脚本,它从数据库检索数据并以 JSON 格式输出数据:

{
    "newslog": [
        {
            "Id": "1",
            "Title": "News Item 1",
            "Author": "Nich",
            "Body": "aldfjlak dklflksd afkjdflk ",
            "Date": "2016-07-26"
        },
        {
            "Id": "2",
            "Title": "News Item 2",
            "Author": "nich",
            "Body": "la la la la la la",
            "Date": "2016-07-26"
        },
        {
            "Id": "3",
            "Title": "News Item 3",
            "Author": "nich",
            "Body": "oh oh oh oh oh",
            "Date": "2016-07-26"
        }
    ]
}

我正在使用 Android Studio,并设法在 Android Studio 日志中显示此数据(JSON 格式),如下所示:

enter image description here

问题:

我想在日志中显示此数据 (JSON) 的部分内容。但目前我只能在日志中显示“标题”。当我尝试检索“Id”、“Body”或“Date”时,它们似乎被忽略。我确信我错过了一些东西。

用于在日志中输出数据的代码:

Code used to output data in logs

日志:

enter image description here

Android Studio 代码:

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ListView;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;


public class NewsActivity extends AppCompatActivity {

    private ListView lv;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_news);
        lv = (ListView) findViewById(R.id.listView);


//       List<String> newsItems = new ArrayList<String>();
//       newsItems.add("News 1");
//       newsItems.add("News 2");
//
//
//      ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, newsItems);
//       lv.setAdapter(arrayAdapter);

        DownloadTask task = new DownloadTask();
        task.execute("http://council4u.com/php-scripts/getnews.php");
    }

    public class DownloadTask extends AsyncTask<String, Void, String>{

        @Override
        protected String doInBackground(String... urls) {

            String result = "";
            URL url;
            HttpURLConnection urlConnection = null;

            try {
                url = new URL(urls[0]);

                urlConnection = (HttpURLConnection) url.openConnection();

                InputStream in = urlConnection.getInputStream();

                InputStreamReader reader = new InputStreamReader(in);

                int data = reader.read();

                while (data != -1) {

                    char current = (char) data;

                    result += current;

                    data = reader.read();
                }

                return result;

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }


            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);

            try{
                JSONObject data = new JSONObject(result);

                String latestnews = data.getString("newslog");
               Log.i ("Latest News", latestnews);


                JSONArray arr = new JSONArray(latestnews);

                for (int i = 0; i < arr.length(); i++) {

                    JSONObject jsonPart = arr.getJSONObject(i);


                    Log.i("title", jsonPart.getString("Title"));
                    Log.i("Body", jsonPart.getString("Body"));

                }

            }  catch (JSONException e) {
                e.printStackTrace();
            }


        }}
}

最佳答案

编辑: 您正在使用:

 String latestnews = data.getString("newslog");

但在响应中它是一个数组,请尝试替换这些行:

String latestnews = data.getString("newslog");
JSONArray arr = new JSONArray(latestnews);

作者:

JSONArray arr = data.getJSONArray("newslog");

当发送到Log的消息为空时,没有日志消息,尝试记录body的长度并测试是否为空:

  String body = jsonPart.getString("Body");
  Log.i("title", jsonPart.getString("Title"));
  Log.i("Body", body==null? "null body" : body.length());

关于android - Android Studio中解析Json数据 - 无法显示日志中的所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38682126/

相关文章:

android - 如何在android中显示默认选项卡?

android - ViewPager 使用 fragment 更新屏幕外 View 而不是主视图

android - 没有找到 android :elevation 的资源标识符

javascript - 如何使用 jquery 将元素添加到 json 的一部分

java - 我应该从哪里下载什么 jar 文件?

安卓图表引擎 : customising graph?

PHP MySQL : Delete row if its not present in API data

ios - 如何使用 JSON.serializer 在 Swift 中解析 JSON

php - 如何解析 PHP 中特定分隔部分的字符串?

python - 使用 lxml 生成器进行非递归查找