【发布时间】:2017-12-15 15:26:40
【问题描述】:
我正在尝试使用以下信息解析 JSON,如您所见,它提供了一个 JSON 对象,该对象具有一个值,然后是一个 JSON 数组,如果排除了 JSON 对象(结果:1),我可以解析以下内容,但是当我尝试下面的代码并按下按钮以检索数据时,它没有提供任何数据。
url 看起来和这个类似,但是有很多数据:
{
"result":1,
"data":[
{
"id":"1",
"langtitude":"31.3256632",
"latitude":"20.3256632",
"userNumber":"23",
"address":"adfsf",
"userFK":"1"
},
{
"id":"2",
"langtitude":"31.3256632",
"latitude":"20.3256632",
"userNumber":"23",
"address":"adfsf",
"userFK":"1"
}
]
}
MainActivity.Java
public class MainActivity extends AppCompatActivity {
private TextView tv_json;
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_json = (TextView)findViewById(R.id.tv_json);
Button btn_parsJSON = (Button)findViewById(R.id.btn_parsJSON);
btn_parsJSON.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new JSONTask().execute("I put the URL here");
}
});
}
public class JSONTask extends AsyncTask<String, String, String>{
@Override
protected void onPreExecute() {
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setTitle("Please wait ...");
progressDialog.setMessage("Grabbing Data");
progressDialog.setCancelable(false);
progressDialog.show();
super.onPreExecute();
}
@Override
protected String doInBackground(String... urls) {
{
HttpURLConnection connection = null;
BufferedReader reader = null;
try {
URL url = new URL(urls[0]);
connection = (HttpURLConnection)url.openConnection();
connection.connect();
InputStream stream = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(stream));
StringBuffer buffer = new StringBuffer();
String line = "";
while((line = reader.readLine()) != null) {
buffer.append(line);
}
String finalJson = buffer.toString();
JSONObject parentObject = new JSONObject(finalJson);
JSONObject array = parentObject.getJSONObject("result");
JSONArray parentArray = array.getJSONArray("data");
StringBuffer finalBuffer = new StringBuffer();
for (int i = 0; i < parentArray.length(); i++) {
JSONObject finalObject = parentArray.getJSONObject(i);
double langtitude = finalObject.getDouble("langtitude");
double latitude = finalObject.getDouble("latitude");
int userNumber = finalObject.getInt("userNumber");
String address = finalObject.getString("address");
int userFK = finalObject.getInt("userFK");
finalBuffer.append(langtitude + "\n" + latitude + "\n" + userNumber + "\n"
+ address + "\n" + userFK + "\n\n");
}
return finalBuffer.toString();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
}
try {
if(reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
tv_json.setText(result);
progressDialog.dismiss();
}
}
}
【问题讨论】: