Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android中显示所有JSON值_Java_Php_Android_Mysql_Json - Fatal编程技术网

Java 如何在android中显示所有JSON值

Java 如何在android中显示所有JSON值,java,php,android,mysql,json,Java,Php,Android,Mysql,Json,我目前正在学习这个教程 它运行得非常完美,但现在我想在文本视图中显示所有JSON值。我是JSON新手,对android只有一点经验 这是我的MainActivity.java。我在教程中做了一些修改 public class MainActivity extends Activity { TextView textview; JSONObject json = null; String str = ""; HttpResponse response; Context context; Prog

我目前正在学习这个教程

它运行得非常完美,但现在我想在文本视图中显示所有JSON值。我是JSON新手,对android只有一点经验

这是我的MainActivity.java。我在教程中做了一些修改

public class MainActivity extends Activity {

TextView textview;
JSONObject json = null;
String str = "";
HttpResponse response;
Context context;
ProgressBar progressbar;
Button button;
JSONArray jArray;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    progressbar = (ProgressBar)findViewById(R.id.progressBar1);
    textview = (TextView)findViewById(R.id.textView1);
    button = (Button)findViewById(R.id.button1);

    progressbar.setVisibility(View.GONE);

    button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            progressbar.setVisibility(View.VISIBLE);

            new GetTextViewData(context).execute();

        }
    });
}

public static Map<String,String> parse(JSONObject json , Map<String,String> out) throws JSONException{
    Iterator<String> keys = json.keys();
    while(keys.hasNext()){
        String key = keys.next();
        String val = null;
        try{
            JSONObject value = json.getJSONObject(key);
            parse(value,out);
        }catch(Exception e){
            val = json.getString(key);
        }

        if(val != null){
            out.put(key,val);
        }
    }
    return out;
}

private class GetTextViewData extends AsyncTask<Void, Void, Void>
{
    public Context context;

    public GetTextViewData(Context context)
    {
        this.context = context;
    }

    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... arg0)
    {

        HttpClient myClient = new DefaultHttpClient();
        HttpPost myConnection = new HttpPost("http://192.168.1.9:80/test-androidex/send-data.php");

        try {
            response = myClient.execute(myConnection);
            str = EntityUtils.toString(response.getEntity(), "UTF-8");

        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


        try{
            JSONArray jArray = new JSONArray(str);
            json = jArray.getJSONObject(0);

        } catch ( JSONException e) {
            e.printStackTrace();
        }

        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
    protected void onPostExecute(Void result)
    {

     try {
           textview.setText(json.getString("name"));

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        progressbar.setVisibility(View.GONE);

    }
}
公共类MainActivity扩展活动{
文本视图文本视图;
JSONObject json=null;
字符串str=“”;
HttpResponse响应;
语境;
ProgressBar ProgressBar;
按钮;
杰索纳雷·贾雷;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressbar=(progressbar)findViewById(R.id.progressBar1);
textview=(textview)findViewById(R.id.textView1);
按钮=(按钮)findViewById(R.id.button1);
progressbar.setVisibility(View.GONE);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
progressbar.setVisibility(View.VISIBLE);
新建GetTextViewData(context.execute();
}
});
}
公共静态映射解析(JSONObject json,Map out)抛出JSONException{
迭代器keys=json.keys();
while(keys.hasNext()){
String key=keys.next();
字符串val=null;
试一试{
JSONObject value=json.getJSONObject(键);
解析(值,out);
}捕获(例外e){
val=json.getString(键);
}
如果(val!=null){
输出(键,val);
}
}
返回;
}
私有类GetTextViewData扩展异步任务
{
公共语境;
公共GetTextViewData(上下文)
{
this.context=上下文;
}
@凌驾
受保护的void onPreExecute()
{
super.onPreExecute();
}
@凌驾
受保护的Void doInBackground(Void…arg0)
{
HttpClient myClient=新的默认HttpClient();
HttpPost myConnection=新的HttpPost(“http://192.168.1.9:80/test-androidex/send data.php”);
试一试{
response=myClient.execute(myConnection);
str=EntityUtils.toString(response.getEntity(),“UTF-8”);
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
试一试{
JSONArray jArray=新JSONArray(str);
json=jArray.getJSONObject(0);
}捕获(JSONException e){
e、 printStackTrace();
}
捕获(例外e)
{
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回null;
}
受保护的void onPostExecute(void结果)
{
试一试{
setText(json.getString(“name”));
}捕获(JSONException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
progressbar.setVisibility(View.GONE);
}
}
这是我的JSON。它与教程有很大不同

public class MainActivity extends Activity {

TextView textview;
JSONObject json = null;
String str = "";
HttpResponse response;
Context context;
ProgressBar progressbar;
Button button;
JSONArray jArray;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    progressbar = (ProgressBar)findViewById(R.id.progressBar1);
    textview = (TextView)findViewById(R.id.textView1);
    button = (Button)findViewById(R.id.button1);

    progressbar.setVisibility(View.GONE);

    button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            progressbar.setVisibility(View.VISIBLE);

            new GetTextViewData(context).execute();

        }
    });
}

public static Map<String,String> parse(JSONObject json , Map<String,String> out) throws JSONException{
    Iterator<String> keys = json.keys();
    while(keys.hasNext()){
        String key = keys.next();
        String val = null;
        try{
            JSONObject value = json.getJSONObject(key);
            parse(value,out);
        }catch(Exception e){
            val = json.getString(key);
        }

        if(val != null){
            out.put(key,val);
        }
    }
    return out;
}

private class GetTextViewData extends AsyncTask<Void, Void, Void>
{
    public Context context;

    public GetTextViewData(Context context)
    {
        this.context = context;
    }

    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... arg0)
    {

        HttpClient myClient = new DefaultHttpClient();
        HttpPost myConnection = new HttpPost("http://192.168.1.9:80/test-androidex/send-data.php");

        try {
            response = myClient.execute(myConnection);
            str = EntityUtils.toString(response.getEntity(), "UTF-8");

        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


        try{
            JSONArray jArray = new JSONArray(str);
            json = jArray.getJSONObject(0);

        } catch ( JSONException e) {
            e.printStackTrace();
        }

        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
    protected void onPostExecute(Void result)
    {

     try {
           textview.setText(json.getString("name"));

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        progressbar.setVisibility(View.GONE);

    }
}
[{“id”:“1”,“name”:“white”,“status”:“0”},{“id”:“2”,“name”:“red”,“status”:“10”},{“id”:“5”,“name”:“blue”,“status”:“15”}]


很明显,我的代码只显示第一个名称“white”。我不明白如何迭代JSONObject来显示所有值。我尝试了其他问题的答案,但我无法将它们完全融入到我的代码中。

这是因为您刚刚从
JSONArray
中获取第一个元素(索引0)

您应该迭代
JSONArray
,以获取数组中的所有
JSONObject

像这样,

JSONArray jArray = new JSONArray(str);
int total=jArray.length();
for(int i=0;i<total;i++) {
    JSONObject json = jArray.getJSONObject(i); // Replace 0 with i'th index.
   // use this json object to iterate over individual objects.
}
JSONArray jArray=新的JSONArray(str);
int total=jArray.length();
对于(inti=0;i)的json解析示例,以及从源服务器插入、更新、删除或获取数据,您应该试试这个


快乐的编码!

你的代码的问题是Alok Patel所说的。但是我看到你的代码的逻辑需要一些改变来做你想做的事情(根据你发布的示例json)。你在值上调用了parse方法,而值实际上是简单的数据,而你应该在JSONObject上调用它

我对您的代码进行了如下重构,以满足您的需要:

public class MainActivity extends Activity {

TextView textview;
JSONObject json = null;
String str = "";
HttpResponse response;
Context context;
ProgressBar progressbar;
Button button;
JSONArray jArray;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    progressbar = (ProgressBar)findViewById(R.id.progressBar1);
    textview = (TextView)findViewById(R.id.textView1);
    button = (Button)findViewById(R.id.button1);

    progressbar.setVisibility(View.GONE);

    button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            progressbar.setVisibility(View.VISIBLE);

            new GetTextViewData(context).execute();

        }
    });
}



private class GetTextViewData extends AsyncTask<Void, Void, Void>
{
    public Context context;
    Map<String,String> out = new Map<String, String>();

    public GetTextViewData(Context context)
    {
        this.context = context;
    }

    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... arg0)
    {

        HttpClient myClient = new DefaultHttpClient();
        HttpPost myConnection = new HttpPost("http://192.168.1.9:80/test-androidex/send-data.php");

        try {
            response = myClient.execute(myConnection);
            str = EntityUtils.toString(response.getEntity(), "UTF-8");

        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


        try{
            JSONArray jArray = new JSONArray(str);
            int total=jArray.length();

            for(int i=0;i<total;i++) {
                 JSONObject json = jArray.getJSONObject(i); 
                 parse(json, out);
            }

        } catch ( JSONException e) {
            e.printStackTrace();
        }

        catch (Exception e)
        {

            e.printStackTrace();
        }
        return null;
    }
    protected void onPostExecute(Void result)
    {

     try {
         // print "out" object to console here by iterating over its keys 
         // or do any needed process on it here.
           textview.setText(json.getString("name"));

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        progressbar.setVisibility(View.GONE);

    }
Map<String,String> parse(JSONObject json , Map<String,String> out) throws JSONException{
    Iterator<String> keys = json.keys();
    while(keys.hasNext()){
        String key = keys.next();
        String val = null;
        try{
            val = json.getString(key);
        }catch(Exception e){

        }

        if(val != null){
            out.put(key,val);
        }
    }
    return out;
 }
}
公共类MainActivity扩展活动{
文本视图文本视图;
JSONObject json=null;
字符串str=“”;
HttpResponse响应;
语境;
ProgressBar ProgressBar;
按钮;
杰索纳雷·贾雷;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressbar=(progressbar)findViewById(R.id.progressBar1);
textview=(textview)findViewById(R.id.textView1);
按钮=(按钮)findViewById(R.id.button1);
progressbar.setVisibility(View.GONE);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
progressbar.setVisibility(View.VISIBLE);
新建GetTextViewData(context.execute();
}
});
}
私有类GetTextViewData扩展异步任务
{
公共语境;
映射出=新映射();
公共GetTextViewData(上下文)
{
this.context=上下文;
}
@凌驾
受保护的void onPreExecute()
{
super.onPreExecute();
}
@凌驾
受保护的Void doInBackground(Void…arg0)
{
HttpClient myClient=新的默认HttpClient();
HttpPost myConnection=新的HttpPost(“http://192.168.1.9:80/test-androidex/send data.php”);
试一试{
response=myClient.execute(myConnection);
str=EntityUtils.toString(response.getEntity(),“UTF-8”);
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
试一试{
JSONArray jArray=新JSO