0
Я пытаюсь загрузить этот список объектов из json в android. Это JSon файлуparsing json object to android
{"cofee":[{"ID":"1","name":"top1"},{"ID":"2","name":"top2"}]}
Я использую этот фрагмент, чтобы загрузить массив JSON.
@SuppressLint("NewApi")
public class east extends Fragment {
ListView list;
TextView id;
TextView name;
Button Btngetdata;
ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>();
//URL to get JSON Array
private static String url = "http://url.com/east.php";
//JSON Node Names
private static final String TAG_ARRAY = "coffee";
private static final String TAG_ID = "ID";
private static final String TAG_NAME = "name";
JSONArray coffee = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.east_fragment, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
oslist = new ArrayList<HashMap<String, String>>();
Btngetdata = (Button)getView().findViewById(R.id.getdata);
Btngetdata.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new JSONParse().execute();
}
});
}
private class JSONParse extends AsyncTask<String, String, JSONObject> {
private ProgressDialog pDialog;
JsonParser jParser = new JsonParser();
private JSONObject json;
@Override
protected void onPreExecute() {
super.onPreExecute();
name = (TextView)getView().findViewById(R.id.name);
id = (TextView)getView().findViewById(R.id.id);
pDialog = new ProgressDialog(getActivity());
pDialog.setMessage("Getting Data ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected JSONObject doInBackground(String... args) {
// Getting JSON from URL
json = jParser.getJSONFromUrl(url);
return json;
}
@Override
protected void onPostExecute(JSONObject json) {
pDialog.dismiss();
try {
// Getting JSON Array from URL
coffee = json.getJSONArray(TAG_ARRAY);
for(int i = 0; i < coffee.length(); i++){
JSONObject c = coffee.getJSONObject(i);
// Storing JSON item in a Variable
String ID = c.getString(TAG_ID);
String name = c.getString(TAG_NAME);
// Adding value HashMap key => value
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_ID, ID);
map.put(TAG_NAME, name);
oslist.add(map);
list = (ListView)getView().findViewById(R.id.listView1);
ListAdapter adapter = new SimpleAdapter(getActivity(), oslist,
R.layout.list_item,
new String[] { TAG_ID, TAG_NAME }, new int[] {
R.id.id, R.id.name});
list.setAdapter(adapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getActivity(), "You Clicked at "+oslist.get(+position).get("name"), Toast.LENGTH_SHORT).show();
}
});
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
Но когда я запустил приложение, в моем списке ничего нет. Вот это LogCat:
03-01 22:23:04.799: W/System.err(3348): org.json.JSONException: No value for coffee
03-01 22:23:04.809: W/System.err(3348): at org.json.JSONObject.get(JSONObject.java:354)
03-01 22:23:04.809: W/System.err(3348): at org.json.JSONObject.getJSONArray(JSONObject.java:548)
03-01 22:23:04.809: W/System.err(3348): at com.mmmmmm.slidingmenu.slidinglist.east$JSONParse.onPostExecute(east.java:109)
03-01 22:23:04.809: W/System.err(3348): at com.mmmmmm.slidingmenu.slidinglist.east$JSONParse.onPostExecute(east.java:1)
03-01 22:23:04.809: W/System.err(3348): at android.os.AsyncTask.finish(AsyncTask.java:631)
03-01 22:23:04.809: W/System.err(3348): at android.os.AsyncTask.access$600(AsyncTask.java:177)
03-01 22:23:04.809: W/System.err(3348): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
03-01 22:23:04.809: W/System.err(3348): at android.os.Handler.dispatchMessage(Handler.java:99)
03-01 22:23:04.809: W/System.err(3348): at android.os.Looper.loop(Looper.java:213)
03-01 22:23:04.809: W/System.err(3348): at android.app.ActivityThread.main(ActivityThread.java:5225)
03-01 22:23:04.809: W/System.err(3348): at java.lang.reflect.Method.invokeNative(Native Method)
03-01 22:23:04.809: W/System.err(3348): at java.lang.reflect.Method.invoke(Method.java:525)
03-01 22:23:04.809: W/System.err(3348): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
03-01 22:23:04.809: W/System.err(3348): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
03-01 22:23:04.809: W/System.err(3348): at dalvik.system.NativeStart.main(Native Method)
App легко подключается к серверу, но я новичок и не мог понять, почему он не может загрузить JSon Arry ?? !! не
Может быть, в формате JSON это пишется 'cofee', но в коде это написано «кофе»? – jonhopkins
похоже, что у вашего Джейсона есть 'cofee', а не' coffee'. –
глупо меня. это было ошибкой написания в json-массиве. Спасибо, парни – alireza