Вывод файла Json:
{
"result": [
{
"Owner_ID": "1",
"Owner_Name": "King",
"Owner_IC": "997788-01-9267",
"Owner_Contact": "012-34567890",
"Owner_AccNum" : "124914848238902",
"Car": {
"Car_ID": "1",
"Car_Name": "Aston Martin",
"Car_Plate": "P 1""Car_Color": "Red",
"Car_Hour": "6",
"Car_Day": "150",
},
{
"Car_ID": "2",
"Car_Name": "Sonata",
"Car_Plate": "S 1234""Car_Color": "Red",
"Car_Hour": "10",
"Car_Day": "200",
}
},
{
"Owner_ID": "2",
"Owner_Name": "Dragon",
"Owner_IC": "962738-98-8345",
"Owner_Contact": "019-86427613",
"Owner_AccNum" : "124914848238902",
"Car": {
"Car_ID": "3",
"Car_Name": "Lambo",
"Car_Plate": "L 104""Car_Color": "Blue",
"Car_Hour": "9",
"Car_Day": "180",
}
Это мой код, как получить данные JSON в Android:
package com.example.ryuuji.fstep;
import android.app.ActionBar;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toolbar;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
public class MainActivity extends ListActivity
{
//DECLARE BUTTON
UserLocalStore userLocalStore;
OwnerLocalStore ownerLocalStore;
CarLocalStore carLocalStore;
private ProgressDialog pDialog;
/////////OWNER////////////////////////
// URL to get contacts JSON
private static String url = "phpfile";
// JSON Node names
private static final String TAG_ID = "Owner_ID";
private static final String TAG_NAME = "Owner_Name";
private static final String TAG_IC = "Owner_IC";
private static final String TAG_CONTACT = "Owner_Contact";
private static final String TAG_ACCNUM = "Owner_AccNum";
private static final String TAG_PASSWORD = "Owner_Password";
private static final String TAG = "result";
// contacts JSONArray
JSONArray owners = null;
// Hashmap for ListView
ArrayList<HashMap<String, String>> ownerList;
/////////CAR///////////////////////////
// JSON Node names
private static final String TAGCAR_ID = "Car_ID";
private static final String TAGCAR_NAME = "Car_Name";
private static final String TAGCAR_PLATE = "Car_Plate";
private static final String TAGCAR_COLOR = "Car_Color";
private static final String TAGCAR_HOUR = "Car_Hour";
private static final String TAGCAR_DAY = "Car_Day";
private static final String CARTAG = "car";
// contacts JSONArray
JSONArray cars = null;
// Hashmap for ListView
ArrayList<HashMap<String, String>> carList;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//CALL OTHER CLASS
userLocalStore = new UserLocalStore(this);
ownerLocalStore = new OwnerLocalStore(this);
carLocalStore = new CarLocalStore(this);
ownerList = new ArrayList<HashMap<String, String>>();
carList = new ArrayList<HashMap<String, String>>();
ListView list = getListView();
//Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
//setActionBar(toolbar);
// Listview on item click listener
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
////////CONTINUE CAR
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// getting values from selected ListItem
String ids = ((TextView) view.findViewById(R.id.ownerid))
.getText().toString();
String ownername = ((TextView) view.findViewById(R.id.ownername))
.getText().toString();
String owneric = ((TextView) view.findViewById(R.id.owneric))
.getText().toString();
String ownercontact = ((TextView) view.findViewById(R.id.ownercontact))
.getText().toString();
String owneraccnum = ((TextView) view.findViewById(R.id.owneraccnum))
.getText().toString();
String password = ((TextView) view.findViewById(R.id.ownerpassword))
.getText().toString();
String ownercar = ((TextView) view.findViewById(R.id.ownercar))
.getText().toString();
// Starting single contact activity
Intent in = new Intent(getApplicationContext(),
Subcontent.class);
in.putExtra(TAG_NAME, ownername);
in.putExtra(TAG_ACCNUM, owneraccnum);
in.putExtra(TAG_CONTACT, ownercontact);
in.putExtra(TAG_IC, owneric);
in.putExtra(TAGCAR_NAME, ownercar);
startActivity(in);
}
});
// Calling async task to get json
new GetOwners().execute();
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
if(userLocalStore.getUserLoggedIn() == true)
getMenuInflater().inflate(R.menu.secmenu_main, menu);
else if(ownerLocalStore.getOwnerLoggedIn() == true)
getMenuInflater().inflate(R.menu.ownmenu_main, menu);
else
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
int id = item.getItemId();
switch (id)
{
case R.id.action_login:
startActivity(new Intent(this,Login.class));
break;
case R.id.action_editprofile:
startActivity(new Intent(this,Profile.class));
break;
case R.id.action_setting:
startActivity(new Intent(this,Setting.class));
break;
case R.id.action_about:
startActivity(new Intent(this,About.class));
break;
case R.id.action_logout:
userLocalStore.clearUserData();
userLocalStore.setUserLoggedIn(false);
startActivity(new Intent(this, MainActivity.class));
break;
case R.id.action_editprofileowner:
startActivity(new Intent(this,OwnerProfile.class));
break;
case R.id.action_logoutowner:
ownerLocalStore.clearOwnerData();
ownerLocalStore.setOwnerLoggedIn(false);
carLocalStore.clearCarData();
carLocalStore.setCarLoggedIn(false);
startActivity(new Intent(this, MainActivity.class));
break;
}
return super.onOptionsItemSelected(item);
}
//START PROCESS
InputStream urls = null;
String result = null;
//Owner
/**
* Async task class to get json by making HTTP call
* */
public class GetOwners extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
// Creating service handler class instance
ServiceHandler sh = new ServiceHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);
Log.d("Response: ", "> " + jsonStr);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
owners = jsonObj.getJSONArray(TAG);
// looping through All Contacts
for (int i = 0; i < owners.length(); i++) {
JSONObject c = owners.getJSONObject(i);
String ids = c.getString(TAG_ID);
String name = c.getString(TAG_NAME);
String ic = c.getString(TAG_IC);
String contact = c.getString(TAG_CONTACT);
String accnum = c.getString(TAG_ACCNUM);
String password = c.getString(TAG_PASSWORD);
cars = jsonObj.getJSONArray(CARTAG);
for (int j = 0; j < cars.length(); j++) {
// Phone node is JSON Object
JSONObject car = cars.getJSONObject(j);
String carid = car.getString(TAGCAR_ID);
String carname = car.getString(TAGCAR_NAME);
String carplate = car.getString(TAGCAR_PLATE);
String carcolor = car.getString(TAGCAR_COLOR);
String carhour = car.getString(TAGCAR_HOUR);
String carday = car.getString(TAGCAR_DAY);
// tmp hashmap for single contact
HashMap<String, String> owner = new HashMap<String, String>();
// adding each child node to HashMap key => value
owner.put(TAG_ID, ids);
owner.put(TAG_NAME, name);
owner.put(TAG_IC, ic);
owner.put(TAG_CONTACT, contact);
owner.put(TAG_ACCNUM, accnum);
owner.put(TAG_PASSWORD, password);
owner.put(TAGCAR_ID, carid);
owner.put(TAGCAR_NAME, carname);
owner.put(TAGCAR_PLATE, carplate);
owner.put(TAGCAR_COLOR, carcolor);
owner.put(TAGCAR_HOUR, carhour);
owner.put(TAGCAR_DAY, carday);
// adding contact to contact list
ownerList.add(owner);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(
MainActivity.this, ownerList,
R.layout.ownerlist_main, new String[]{TAG_NAME, TAG_IC,
TAG_CONTACT, TAG_ACCNUM}, new int[]{R.id.ownername, R.id.owneric,
R.id.ownercontact, R.id.owneraccnum});
ListAdapter adapterCar = new SimpleAdapter(
MainActivity.this, ownerList,
R.layout.ownercar_main, new String[]{TAGCAR_NAME}, new int[]{R.id.ownercar});setListAdapter(adapter);
setListAdapter(adapterCar);
}
}
//CAR
//Owner
/**
* Async task class to get json by making HTTP call
* */
public class GetCars extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
// Creating service handler class instance
ServiceHandler sh = new ServiceHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);
Log.d("Response: ", "> " + jsonStr);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
owners = jsonObj.getJSONArray(TAG);
//cars = jsonObj.getJSONArray(CARTAG);
// looping through All Contacts
for (int i = 0; i < owners.length(); i++) {
JSONObject c = owners.getJSONObject(i);
String ids = c.getString(TAG_ID);
String name = c.getString(TAG_NAME);
String ic = c.getString(TAG_IC);
String contact = c.getString(TAG_CONTACT);
String accnum = c.getString(TAG_ACCNUM);
String password = c.getString(TAG_PASSWORD);
cars = c.getJSONArray(CARTAG);
for (int j = 0; j < cars.length(); j++) {
// Phone node is JSON Object
JSONObject car = cars.getJSONObject(j);
String carid = car.getString(TAGCAR_ID);
String carname = car.getString(TAGCAR_NAME);
String carplate = car.getString(TAGCAR_PLATE);
String carcolor = car.getString(TAGCAR_COLOR);
String carhour = car.getString(TAGCAR_HOUR);
String carday = car.getString(TAGCAR_DAY);/*String id = c.getString(TAG_ID);
String name = c.getString(TAG_NAME);
String email = c.getString(TAG_EMAIL);
String address = c.getString(TAG_ADDRESS);
String gender = c.getString(TAG_GENDER);
// Phone node is JSON Object
JSONObject phone = c.getJSONObject(TAG_PHONE);
String mobile = phone.getString(TAG_PHONE_MOBILE);
String home = phone.getString(TAG_PHONE_HOME);
String office = phone.getString(TAG_PHONE_OFFICE);*/
// tmp hashmap for single contact
HashMap<String, String> owner = new HashMap<String, String>();
// adding each child node to HashMap key => value
owner.put(TAG_ID, ids);
owner.put(TAG_NAME, name);
owner.put(TAG_IC, ic);
owner.put(TAG_CONTACT, contact);
owner.put(TAG_ACCNUM, accnum);
owner.put(TAG_PASSWORD, password);
owner.put(TAGCAR_ID, carid);
owner.put(TAGCAR_NAME, carname);
owner.put(TAGCAR_PLATE, carplate);
owner.put(TAGCAR_COLOR, carcolor);
owner.put(TAGCAR_HOUR, carhour);
owner.put(TAGCAR_DAY, carday);
// adding contact to contact list
ownerList.add(owner);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(
MainActivity.this, ownerList,
R.layout.ownerlist_main, new String[]{TAG_NAME, TAG_IC,
TAG_CONTACT, TAG_ACCNUM}, new int[]{R.id.ownername, R.id.owneric,
R.id.ownercontact, R.id.owneraccnum});
ListAdapter adapterCar = new SimpleAdapter(
MainActivity.this, ownerList,
R.layout.ownercar_main, new String[]{TAGCAR_NAME}, new int[]{R.id.ownercar});setListAdapter(adapter);
setListAdapter(adapterCar);
}
}
}
Это мое ListView
:
<ListView
android:id="@android:id/list"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="75dp" />
<requestFocus />
А это мой ownerlist.xml
:
<!-- Name Label -->
<!-- Mobile number label -->
<TextView
android:id="@+id/ownername"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="left"android:text="Name :"android:textColor="#5d5d5d"android:textStyle="bold"android:layout_alignBaseline="@+id/ownercontact"android:layout_alignBottom="@+id/ownercontact"android:layout_toRightOf="@+id/imageButton"android:layout_toEndOf="@+id/imageButton" />
<TextView
android:id="@+id/ownercontact"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="left"android:text="Contact : "android:textColor="#5d5d5d"android:textStyle="bold"android:layout_alignBaseline="@+id/owneraccnum"android:layout_alignBottom="@+id/owneraccnum"android:layout_toRightOf="@+id/imageButton"android:layout_toEndOf="@+id/imageButton" />
<TextView
android:id="@+id/owneraccnum"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="left"android:text="Account Number : "android:textColor="#5d5d5d"android:textStyle="bold"android:layout_centerVertical="true"android:layout_alignLeft="@+id/ownername"android:layout_alignStart="@+id/ownername" />
<TextView
android:id="@+id/owneric"android:layout_width="1dp"android:layout_height="1dp"android:gravity="left"android:text="IC :"android:textColor="#5d5d5d"android:textStyle="bold"android:layout_alignBaseline="@+id/ownercontact"android:layout_alignBottom="@+id/ownercontact"android:layout_toRightOf="@+id/imageButton"android:layout_toEndOf="@+id/imageButton" />
<TextView
android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Car : "android:id="@+id/ownercar" />
<TextView
android:layout_width="1dp"android:layout_height="1dp"android:text="New Text"android:id="@+id/ownerpassword" />
<TextView
android:layout_width="1dp"android:layout_height="1dp"android:text="New Text"android:id="@+id/ownerid" />
Проблема в AsyncTask, потому что он не получает никаких данных. Если я сделаю это только в одномерном массиве, это будет успех. Но когда я объединяюсь с другим массивом (машиной), это не удается. Извините за мой ломаный английский
Вы можете использовать Модели для этого и даже более сложные JSON.
JSONObject jsonObject = new JSONObject(jsonstr);
JSONArray jsonArray=jsonObject.getJSONArray("result");
StringBuffer finalBufferedData=new StringBuffer();
List <model> modelList=new ArrayList<>();
for(int i=0; i<jsonObject.length(); i++){
JSONObject finalObject= jsonArray.getJSONObject(i);
model movie_model= new model();
movie_model.setMovie(finalObject.getInt("Owner_ID"));
movie_model.setYear(finalObject.getString("Owner_Name"));
movie_model.setRating(finalObject.getString("Owner_IC"));
movie_model.setDirector(finalObject.getString("Owner_Contact"));
movie_model.setDuration(finalObject.getDouble("Owner_AccNum"));
List <model.cast> castList=new ArrayList<>();
model.cast cast= new model.cast();
getJSONObject(0).getInt("Car_ID"));
cast.setCar_ID(jsonstr.getJSONArray("cast") //put both these in same line//
.getJSONObject(j).getInt("Car_ID"));
cast.setCar_Name(jsonstr.getJSONArray("cast")
.getJSONObject(0).getString("Car_Name"));
//do the rest similarly//
castList.add(cast);
}
movie_model.setCastList(castList);
modelList.add(movie_model);
}
return modelList;
Создайте новый класс Java с именем модели
public class model {
private String Owner_Name;
private int Owner_ID;
private String Owner_Contact;
private String Owner_IC;
private Double Own_AccNum;
private List<cast> castList;
public String getMovie() {
return Owner_Name;
}
public void setMovie(String movie) {
this.Owner_Name = Owner_Name;
}
public int getYear() {
return year;
}
public void setYear(int Owner_ID) {
this.Owner_ID = Owner_ID;
}
//SIMILARLY DO FOR OTHERS//
public List<cast> getCastList() {
return castList;
}
public void setCastList(List<cast> castList) {
this.castList = castList;
}
public static class cast{
private int Car_ID;
private String Name;
//SIMILARLY DECLARE OTHERS
public int getCar_ID(int Car_ID) {
return this.Car_ID;
}
public void setName(int Car_ID) {
this.Car_ID = Car_ID;
}
public int getCar_Name(String Car_Name) {
return this.Car_ID;
}
public void setName(String Car_Name) {
this.Car_Name = Car_Name
}
//SIMILARLY DO FOR OTHERS
}
Чувствительность к регистру важно в JSON, поэтому измените CARTAG
в "Car"
вместо "car"
,
Это с заглавной буквыС«в вашем полученном JSON.
Так должно быть:
private static final String CARTAG = "Car";