[英]JSON - Help Converting JSONArray to Arraylist and populate a listview.
I am fairly new to android and java.我对android和java相当陌生。 I am trying to add JSON data to a listview.我正在尝试将 JSON 数据添加到列表视图。 I have the JSON data coming in and printing to log, but I am having a hard time getting the data to the list view.我有 JSON 数据进入并打印到日志,但我很难将数据获取到列表视图。 I've tried and arraylist on row numbers and it works, but don't know how to get the JSON data there.我已经尝试在行号上使用 arraylist 并且它有效,但不知道如何在那里获取 JSON 数据。 Any pointers or advice would be appericated.任何指针或建议都会被引用。
I am looking for a result Like我正在寻找一个结果喜欢
(Keys)ID Name Tourn_ID (Values) 1 Tournamnet1 MI2016 (Values) 2 Tournamnet2 UT2016 (Values) 3 Tournamnet4 USNC2016 etc. (Keys)ID Name Tourn_ID (Values) 1 Tournamnet1 MI2016 (Values) 2 Tournamnet2 UT2016 (Values) 3 Tournamnet4 USNC2016 etc.
Here is my code Java.这是我的代码 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();
}
}
}
}
Create a JAVA file named Model.java
创建一个名为Model.java
的 JAVA 文件
public class Model {
public String ID ;
public String Name;
public Tourn_ID;
}
Now at the time of parsing data现在在解析数据的时候
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);
}
Adapter.java适配器.java
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;
}
}
in custom_adapter.xml在custom_adapter.xml 中
<?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>
now listview现在列表视图
listview = (Listview).findViewById(R.id.idOfYpurListview);
Adapter adapter = new Adapter(Activity.this,modelArrayList);
listview.setAdapter(adapter);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.