Java 如何在android中显示所有JSON值
我目前正在学习这个教程 它运行得非常完美,但现在我想在文本视图中显示所有JSON值。我是JSON新手,对android只有一点经验 这是我的MainActivity.java。我在教程中做了一些修改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
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