所以基本上我正在开发一个从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();
}
}}
}
答案 0 :(得分:1)
修改强>: 你正在使用:
String latestnews = data.getString("newslog");
但在响应中它是一个数组,尝试替换这些行:
String latestnews = data.getString("newslog");
JSONArray arr = new JSONArray(latestnews);
通过:
JSONArray arr = data.getJSONArray("newslog");
当Log的消息为空时没有日志消息,尝试记录正文的长度并测试它是否为null:
String body = jsonPart.getString("Body");
Log.i("title", jsonPart.getString("Title"));
Log.i("Body", body==null? "null body" : body.length());
答案 1 :(得分:1)
我遇到了类似的问题,尝试在{Serializable
(或Parcelable
)时JSON
,Intent
偶数和Extras
对象进行记录1}}在onCreate()
内。
始终使用Activity
工具显示null ...好吧,我尝试使用Evaluate Expression
并且我已经看到数据是正确的。使用Toast
会产生同样的效果。
最后,我假设数据是正确的,Android Studio调试器上存在问题。