Java JSON—帮助将JSONArray转换为Arraylist并填充listview。
我对android和java相当陌生。我正在尝试向listview添加JSON数据。我将JSON数据输入并打印到日志中,但我很难将数据获取到列表视图中。我已经尝试过在行号上使用arraylist,它可以工作,但不知道如何在那里获取JSON数据。任何指示或建议都会被提出 我在寻找这样的结果 (钥匙)ID名称Tourn\u ID (价值)1图南网1 MI2016 (价值)2 Tournamnet2 UT2016 (值)3 Tournamnet4 USNC2016 等等 这是我的Java代码Java JSON—帮助将JSONArray转换为Arraylist并填充listview。,java,android,json,listview,arraylist,Java,Android,Json,Listview,Arraylist,我对android和java相当陌生。我正在尝试向listview添加JSON数据。我将JSON数据输入并打印到日志中,但我很难将数据获取到列表视图中。我已经尝试过在行号上使用arraylist,它可以工作,但不知道如何在那里获取JSON数据。任何指示或建议都会被提出 我在寻找这样的结果 (钥匙)ID名称Tourn\u ID (价值)1图南网1 MI2016 (价值)2 Tournamnet2 UT2016 (值)3 Tournamnet4 USNC2016 等等 这是我的Java代码
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import static android.R.*;
import static android.R.layout.simple_list_item_1;
import static java.util.Arrays.asList;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DownloadTask task = new DownloadTask();
task.execute("http://www.goalballscoreboard.net/mobile/downloads/WebServices/Tournnames/Tournnames.php?rows=all");
ListView tournListView = (ListView) findViewById(R.id.tournListView);
final ArrayList<String> myTournList = new ArrayList<String>(asList("ROW 1", "ROW 2", "Row3"));
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, simple_list_item_1, myTournList);
tournListView.setAdapter(arrayAdapter);
}
public class DownloadTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String result = "";
URL url;
HttpURLConnection urlConnection = null;
try {
url = new URL(urls[0]);
urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = urlConnection.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
int data = reader.read();
while (data != -1) {
char current = (char) data;
result += current;
data = reader.read();
}
return result;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
try {
JSONObject jsonObject = new JSONObject(result);
String tournInfo = jsonObject.getString("posts");
Log.i("Tourn INFO", tournInfo);
JSONArray arr = new JSONArray(tournInfo);
List<String> list = new ArrayList<String>();
for (int i = 0; i < arr.length(); i++) {
JSONObject jsonPart = arr.getJSONObject(i);
JSONObject jsonObjectPost = jsonPart.getJSONObject("post");
//Log.i("Each Tournament Object", jsonPart.getString("post"));
Log.i("ID", jsonObjectPost.getString("ID"));
Log.i("Name of Tournament", jsonObjectPost.getString("NAME"));
Log.i("TOURN_ID", jsonObjectPost.getString("TOURN_ID"));
String id = jsonObjectPost.get("ID").toString();
String name = jsonObjectPost.get("NAME").toString();
String tournID = jsonObjectPost.get("TOURN_ID").toString();
list.add(jsonObjectPost.getString("ID") + ", " + jsonObjectPost.getString("NAME") + "," + jsonObjectPost.getString("TOURN_ID") + "\n");
}
System.out.println("" + list.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
导入android.os.AsyncTask;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入android.widget.Toast;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.MalformedURLException;
导入java.net.URL;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Locale;
导入静态android.R.*;
导入静态android.R.layout.simple_list_item_1;
导入静态java.util.Arrays.asList;
公共类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DownloadTask任务=新建DownloadTask();
任务。执行(“http://www.goalballscoreboard.net/mobile/downloads/WebServices/Tournnames/Tournnames.php?rows=all");
ListView tournListView=(ListView)findViewById(R.id.tournListView);
最终ArrayList myTournList=新ArrayList(asList(“第1行”、“第2行”、“第3行”);
ArrayAdapter ArrayAdapter=新的ArrayAdapter(此为简单列表项1,myTournList);
setAdapter(arrayAdapter);
}
公共类DownloadTask扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(字符串…URL){
字符串结果=”;
网址;
HttpURLConnection-urlConnection=null;
试一试{
url=新url(url[0]);
urlConnection=(HttpURLConnection)url.openConnection();
InputStream in=urlConnection.getInputStream();
InputStreamReader reader=新的InputStreamReader(in);
int data=reader.read();
while(数据!=-1){
当前字符=(字符)数据;
结果+=电流;
data=reader.read();
}
返回结果;
}捕获(格式错误){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
试一试{
JSONObject JSONObject=新JSONObject(结果);
String tournInfo=jsonObject.getString(“posts”);
Log.i(“Tourn信息”,tournInfo);
JSONArray arr=新JSONArray(tournInfo);
列表=新的ArrayList();
对于(int i=0;i
创建一个名为Model.JAVA的JAVA文件
public class Model {
public String ID ;
public String Name;
public Tourn_ID;
}
现在在解析数据时
ArrayList<Model> modelArrayList = new ArrayList();
for (int i = 0; i < arr.length(); i++) {
JSONObject jsonPart = arr.getJSONObject(i);
JSONObject jsonObjectPost = jsonPart.getJSONObject("post");
Model model;
model.ID = jsonObjectPost.get("ID").toString();
model.Name = jsonObjectPost.get("NAME").toString();
Model.Tourn_ID = jsonObjectPost.get("TOURN_ID").toString();
modelArrayList .add(model);
}
发布您正在解析的JSON和适配器类的示例。{“posts”:[{“Post”:{“ID”:“74”,“TOURN_ID”:“999”,“YEAR”:“2016”,“START_DATE”:“2016-09-07”,“END_DATE”:“2016-09-18”,“DATE_STRING”:“2016年9月7日至18日”,“NAME”:“2016年残奥会”,“ShortName”:“2016年残奥会”,“TOURN TYPE”:“国际”{“邮报”{“ID:“73”,“TOURN_ID:“999”,“年份”:“2016”,“开始日期”:“2016-06-23”,“结束日期”:“2016-06-25”,“日期字符串”:“2016年6月22日至23日”,“姓名”:“2016年美国篮球协会全国守门球锦标赛”,“简称”:“2016年美国国民”,“TOURN_类型”:“国内”}
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class CustomAdapter extends BaseAdapter{
ArrayList<Model> result = new ArrayList();
Context context;
int [] imageId;
private static LayoutInflater inflater=null;
public CustomAdapter(Context context, ArrayList<Model> result) {
// TODO Auto-generated constructor stub
this.result=result;
this.context=context;
inflater = ( LayoutInflater )context.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return result.size;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public class Holder
{
TextView tv,tv2,tv3;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
Holder holder=new Holder();
View rowView;
rowView = inflater.inflate(R.layout.custom_adapter, null);
holder.tv=(TextView) rowView.findViewById(R.id.textView1);
holder.tv2=(TextView) rowView.findViewById(R.id.textView2);
holder.tv3=(TextView) rowView.findViewById(R.id.textView3);
holder.tv.setText(result[position].ID);
holder.tv2.setText(result[position].Name);
holder.tv3.setText(result[position].Tour_ID);
rowView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(context, "You Clicked "+result[position], Toast.LENGTH_LONG).show();
}
});
return rowView;
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TextView
android:id="@+id/textView1"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25dp"
android:text="TextView" />
<TextView
android:id="@+id/textView2"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25dp"
android:text="TextView" />
<TextView
android:id="@+id/textView3"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25dp"
android:text="TextView" />
</LinearLayout>
listview = (Listview).findViewById(R.id.idOfYpurListview);
Adapter adapter = new Adapter(Activity.this,modelArrayList);
listview.setAdapter(adapter);