Android JSONParser获取带花括号的完整JSON文件
我正在尝试实现从服务器获取JSON数据的示例JSON数据应用程序 我得到了完整的JSON文件我的编码有什么问题 我正在关注youtube教程,但他成功了,但我得到了完整的JSON文件 这是JSON服务器端文件Android JSONParser获取带花括号的完整JSON文件,android,json,Android,Json,我正在尝试实现从服务器获取JSON数据的示例JSON数据应用程序 我得到了完整的JSON文件我的编码有什么问题 我正在关注youtube教程,但他成功了,但我得到了完整的JSON文件 这是JSON服务器端文件 { "movies" :[ { "movie" : "Avenger", "year" : 2012 } ] } 这是安卓应用程序的代码 package com.yog.jsonparser; import android.os.AsyncTask; import android.s
{
"movies" :[
{
"movie" : "Avenger",
"year" : 2012
}
]
}
这是安卓应用程序的代码
package com.yog.jsonparser;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.URLUtil;
import android.widget.Button;
import android.widget.TextView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
TextView tvData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnHit = (Button) findViewById(R.id.btnHit);
tvData = (TextView)findViewById(R.id.tvJsonItem);
btnHit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new JSONTask().execute("http://myDomainName.com/getData.txt");
}
});
}
public class JSONTask extends AsyncTask<String,String,String>{
HttpURLConnection connection = null;
BufferedReader reader = null;
URI url;
StringBuffer buffer;
@Override
protected String doInBackground(String... params){
try{
//URL OF REQUESTED PAGE
url=new URI(params[0]);
connection = (HttpURLConnection) (new URL(params[0]).openConnection());
connection.connect();
InputStream stream=connection.getInputStream();
reader=new BufferedReader(new InputStreamReader(stream));
buffer=new StringBuffer();
String line;
while((line =reader.readLine())!=null){
buffer.append(line);
}
String finalJSON=buffer.toString();
JSONObject parentOject = new JSONObject(finalJSON);
JSONArray parentArray = parentOject.getJSONArray("movies");
JSONObject finalObject= parentArray.getJSONObject(0);
String movieName= finalObject.getString("movie");
int year=finalObject.getInt("year");
return movieName + "-" + year;
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} finally {
if(connection !=null){
connection.disconnect();
}
try{
if(reader !=null){
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
tvData.setText(buffer.toString());
}
}
}
package com.yog.jsonparser;
导入android.os.AsyncTask;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.view.view;
导入android.webkit.URLUtil;
导入android.widget.Button;
导入android.widget.TextView;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.URI;
导入java.net.URISyntaxException;
导入java.net.URL;
导入java.net.URL;
公共类MainActivity扩展了AppCompatActivity{
文本视图数据;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
按钮btnHit=(按钮)findViewById(R.id.btnHit);
tvData=(TextView)findviewbyd(R.id.tvJsonItem);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
新建JSONTask()。执行(“http://myDomainName.com/getData.txt");
}
});
}
公共类JSONTask扩展了异步任务{
HttpURLConnection=null;
BufferedReader reader=null;
uriurl;
字符串缓冲区;
@凌驾
受保护的字符串doInBackground(字符串…参数){
试一试{
//请求页面的URL
url=新URI(参数[0]);
connection=(HttpURLConnection)(新URL(参数[0]).openConnection());
connection.connect();
InputStream=connection.getInputStream();
reader=新的BufferedReader(新的InputStreamReader(流));
buffer=新的StringBuffer();
弦线;
而((line=reader.readLine())!=null){
buffer.append(行);
}
字符串finalJSON=buffer.toString();
JSONObject parentProject=新的JSONObject(finalJSON);
JSONArray parentArray=parentobject.getJSONArray(“电影”);
JSONObject finalObject=parentArray.getJSONObject(0);
String movieName=finalObject.getString(“电影”);
int year=finalObject.getInt(“年”);
返回movieName+“-”+年;
}捕获(URISyntaxException e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}捕获(JSONException e){
e、 printStackTrace();
}最后{
if(连接!=null){
连接断开();
}
试一试{
if(读卡器!=null){
reader.close();
}
}捕获(IOE异常){
e、 printStackTrace();
}
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串s){
super.onPostExecute(s);
tvData.setText(buffer.toString());
}
}
}
电流输出:
{“电影”:[{“电影”:“复仇者”,“年份”:2012}]
预期产出:
复仇者
2012如下更改您的
onPostExecute
方法
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
tvData.setText(s);
}
这里s
将是doInBackground
的返回语句。“movieName+”-“+year;”您将在TextView
中获得{“电影”:[{“电影”:“复仇者”,“年份”:2012}
,因为您正在将缓冲区的输出设置为TextView
。更改您的onPostExecute
,如下所示:
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if(s != null){
tvData.setText(s);
}else{
//// Some error occurred
tvData.setText(buffer.toString());
}
}
你的问题是什么?我得到这个输出{“电影”:[{“电影”:“复仇者”,“2012年”}},我只想要复仇者2012作为输出::@EricB.Thank a lot@EricB.ohh shit:(小错误,非常抱歉,伙计们:(对于这样的nooby que:quo:非常感谢。)BRO@YogeshGosavi哈哈..有时候会发生..;-):P是的,当您不熟悉任何环境时:3:)