所以基本上我正在开发一个从 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 格式),如下所示:
问题:
我想在日志中显示此数据 (JSON) 的部分内容。但目前我只能在日志中显示“标题”。当我尝试检索“Id”、“Body”或“Date”时,它们似乎被忽略。我确信我错过了一些东西。
用于在日志中输出数据的代码:
日志:
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/