如何将json代码放入我的应用程序 [英] how to get json code into my app

查看:126
本文介绍了如何将json代码放入我的应用程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am working on JSON parsing where in my TypeMenu java file i am getting response from server & when i click on the item in listview i should get related item in the next activity in list view. That listview item is also coming from server.

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

Here i want to get item only from selected item, but i am getting all item from database in my next activity which is SubMenu.java. Like if i select Pizza so in next activity i should get item related with pizza only Here is my TypeMenu.java file.

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<String, String>> 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<String, String> 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<Void, Void, Void> {

    @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<String, String> 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 file:

Here is my SubMenu.java file :

    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<String, String>> 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<String, String> 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<Void, Void, Void> {

        @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<String, String> 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文件。 。

here is my php file..

<?php 
include ('config.php');

if (isset($_GET["mid"])) 
{
    $type_items = $_GET['mid'];

$sql = mysqli_query($conn,"SELECT * FROM main_menu_items WHERE type_items = '".$type_items."'");                                                          
$arr = array();
$i=0;
while($result = mysqli_fetch_array($sql))
{
$arr[$i]['id']= $result['id'];
$arr[$i]['name']= $result['name'];
$i++;
}
}
echo json_encode($arr);

?>

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

Here i m not getting anything only null is written when i use the url on broweser and if i checked it on device it shows me error like this "Json Parsing error:Value null of type org.json.JSONObject$1 cannnot be converted to JsonArray"

推荐答案

不要做这个愚蠢的事情

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

jsut add Json Libray Download from http://www.java2s.com/Code/Jar/g/Downloadgson222jar.htm Or

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

就像
一样电影​​是pojo类的回应

Just Do it like Movie is pojo class of responce

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

More Details -https://guides.codepath.com/android/Leveraging-the-Gson-Library and https://stackoverflow.com/a/22754230/4741746 and https://stackoverflow.com/a/28392599/4741746

创建类似

public class Responce implements Serializable {

    @SerializedName("result")
    public ArrayList<Data>  result;

    public class Data implements Serializable {

    @SerializedName("name")
    public String  name;


    }
}

而不是解析它在响应中(将此3行放在此行下方String jsonStr = sh.makeServiceCall(url);此行)

and than parse it in responce like ( put this 3 line below below this line String jsonStr = sh.makeServiceCall(url); this line )

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

这篇关于如何将json代码放入我的应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆