如何将json代码放入我的应用程序

我正在进行JSON解析,在我的TypeMenu java文件中,我从服务器获得响应,当我点击listview中的项目时,我应该在列表视图中的下一个活动中获得相关项目。 该listview项目也来自服务器。

在这里,我想从所选项目中获取项目,但我在下一个活动中从SubMenu.java获取数据库中的所有项目。 就像我选择披萨所以在下一个活动中我应该得到与披萨相关的项目这是我的TypeMenu.java文件。

package com.example.zeba.broccoli; import android.app.ProgressDialog; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.HashMap; public class TypeMenu extends AppCompatActivity { private String TAG = TypeMenu.class.getSimpleName(); String bid; private ProgressDialog pDialog; private ListView lv; private static final String TAG_BID = "bid"; // URL to get contacts JSON private static String url = "http://cloud.granddubai.com/brtemp/index.php"; ArrayList<HashMap> contactList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_type_menu); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); contactList = new ArrayList(); lv = (ListView) findViewById(R.id.list); new GetContacts().execute(); // on seleting single product // launching Edit Product Screen lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { // getting values from selected ListItem HashMap selected = contactList.get(position); String keyId = new ArrayList(selected.keySet()).get(0); String type_items = selected.get(keyId); Intent in = new Intent(getApplicationContext(), SubMenu.class); // sending pid to next activity in.putExtra(TAG_BID ,type_items ); startActivityForResult(in, 100); Toast.makeText(getApplicationContext(),"Toast" +type_items ,Toast.LENGTH_LONG).show(); } }); } /** * Async task class to get json by making HTTP call */ private class GetContacts extends AsyncTask { @Override protected void onPreExecute() { super.onPreExecute(); // Showing progress dialog pDialog = new ProgressDialog(TypeMenu.this); pDialog.setMessage("Please wait..."); pDialog.setCancelable(false); pDialog.show(); // Toast.makeText(getApplicationContext(),"Toast",Toast.LENGTH_LONG).show(); } @Override protected Void doInBackground(Void... arg0) { HttpHandler sh = new HttpHandler(); // Making a request to url and getting response String jsonStr = sh.makeServiceCall(url); Log.e(TAG, "Response from url: " + jsonStr); if (jsonStr != null) { try { JSONArray jsonArry = new JSONArray(jsonStr); for (int i = 0; i < jsonArry.length(); i++) { JSONObject c = jsonArry.getJSONObject(i); String id = c.getString("id"); String type = c.getString("type"); HashMap contact = new HashMap(); contact.put("id", id); contact.put("type", type); contactList.add(contact); } } catch (final JSONException e) { Log.e(TAG, "Json parsing error: " + e.getMessage()); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "Json parsing error: " + e.getMessage(), Toast.LENGTH_LONG) .show(); } }); } } else { Log.e(TAG, "Couldn't get json from server."); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "Couldn't get json from server. Check LogCat for possible errors!", Toast.LENGTH_LONG) .show(); } }); } 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( TypeMenu.this, contactList, R.layout.list_item, new String[]{ "type","id"}, new int[]{ R.id.type,R.id.id}); lv.setAdapter(adapter); } } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); return true; default: return super.onOptionsItemSelected(item); } } } 

这是我的SubMenu.java文件:

  package com.example.zeba.broccoli; import android.app.ProgressDialog; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.HashMap; public class SubMenu extends AppCompatActivity { private String TAG = SubMenu.class.getSimpleName(); String type_items ; private ProgressDialog pDialog; private ListView lv; private static final String TAG_BID = "bid"; // URL to get contacts JSON private static String url = "http://cloud.granddubai.com/broccoli/menu_typeitem.php"; ArrayList<HashMap> contactList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_type_menu); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); Intent i = getIntent(); // getting product id (pid) from intent type_items = i.getStringExtra(TAG_BID); Toast.makeText(getApplicationContext(),"Toast 12" + type_items ,Toast.LENGTH_LONG).show(); getSupportActionBar().setDisplayHomeAsUpEnabled(true); contactList = new ArrayList(); lv = (ListView) findViewById(R.id.list); new GetContacts().execute(); // on seleting single product // launching Edit Product Screen lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { pDialog = new ProgressDialog(SubMenu.this); pDialog.setMessage("Loading book details."); pDialog.setIndeterminate(false); pDialog.setCancelable(true); pDialog.show(); // getting values from selected ListItem HashMap selected = contactList.get(position); String keyId = new ArrayList(selected.keySet()).get(0); String type_items = selected.get(keyId); //Intent in = new Intent(getApplicationContext(), SubMenu.class); // sending pid to next activity // in.putExtra(TAG_BID ,text); //startActivityForResult(in, 100); Toast.makeText(getApplicationContext(),"Toast" + type_items,Toast.LENGTH_LONG).show(); } }); } /** * Async task class to get json by making HTTP call */ private class GetContacts extends AsyncTask { @Override protected void onPreExecute() { super.onPreExecute(); // Showing progress dialog pDialog = new ProgressDialog(SubMenu.this); pDialog.setMessage("Please wait..."); pDialog.setCancelable(false); pDialog.show(); // Toast.makeText(getApplicationContext(),"Toast",Toast.LENGTH_LONG).show(); } @Override protected Void doInBackground(Void... arg0) { HttpHandler sh = new HttpHandler(); // Making a request to url and getting response String jsonStr = sh.makeServiceCall(url); Log.e(TAG, "Response from url: " + jsonStr); if (jsonStr != null) { try { JSONArray jsonArry = new JSONArray(jsonStr); for (int i = 0; i < jsonArry.length(); i++) { JSONObject c = jsonArry.getJSONObject(i); String id = c.getString("id"); String name = c.getString("name"); HashMap contact = new HashMap(); contact.put("id", id); contact.put("name", name); contactList.add(contact); } } catch (final JSONException e) { Log.e(TAG, "Json parsing error: " + e.getMessage()); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "Json parsing error: " + e.getMessage(), Toast.LENGTH_LONG) .show(); } }); } } else { Log.e(TAG, "Couldn't get json from server."); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "Couldn't get json from server. Check LogCat for possible errors!", Toast.LENGTH_LONG) .show(); } }); } 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( SubMenu.this, contactList, R.layout.list_item, new String[]{ "name","id"}, new int[]{ R.id.type}); lv.setAdapter(adapter); } } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); return true; default: return super.onOptionsItemSelected(item); } } } 

这是我的php文件..

  

这里我没有得到任何东西只有null当我在浏览器上使用url时,如果我在设备上检查它,它会显示我这样的错误“Json Parsing错误:类型org.json.JSONObject $ 1的值null无法转换为JsonArray”

不要做这个愚蠢的东西

jsut添加Json Libray从http://www.java2s.com/Code/Jar/g/Downloadgson222jar.htm下载或者

 dependencies { compile 'com.google.code.gson:gson:2.6.2' } 

就像电影是pojo类的响应一样

 Gson gson = new GsonBuilder().create(); Movie movie = gson.fromJson(response, Movie.class); 

更多详情 – https://guides.codepath.com/android/Leveraging-the-Gson-Library和https://stackoverflow.com/a/22754230/4741746和https://stackoverflow.com/a/28392599/4741746

创建类似的

 public class Responce implements Serializable { @SerializedName("result") public ArrayList result; public class Data implements Serializable { @SerializedName("name") public String name; } } 

然后在响应中解析它(把这3行放在这行下面String jsonStr = sh.makeServiceCall(url);这一行)

 Gson gson = new GsonBuilder().create(); Responce mResponce = gson.fromJson(jsonStr , Responce .class); String mName =mResponce.result.name; 

像这样用JSONObject替换JsonArray

  JSONObject jsonObj = new JSONObject(jsonStr); String id = jsonObj.getString("id"); String name = jsonObj.getString("name"); HashMap contact = new HashMap<>(); contact.put("id", id); contact.put("name", name); contactList.add(contact);