gpt4 book ai didi

android - Android ListView 中的 JSONArray

转载 作者:太空狗 更新时间:2023-10-29 13:30:24 35 4
gpt4 key购买 nike

urlHi 我有这段代码可以从 php 页面接收数据,我想将该数据放在 ListView 中。我收到了该数据,并且我已经通过 system.out.println 看到了该数据,但 ListView 中有白行。代码:

public class Utenti extends ListActivity {


ListView lv;

ListView listView;

static String temp;
//ListAdapter adapter;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);






StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

StrictMode.setThreadPolicy(policy);




lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {


}
});





Thread t = new Thread(new Runnable (){

public void run() {
//Looper.prepare();
JSONObject json =conn("ketut.php");

try {
//Get the element that holds the earthquakes ( JSONArray )
JSONArray ute = json.getJSONArray("success");
final List<HashMap<String, String>> mylist =
new ArrayList<HashMap<String, String>>();
HashMap<String, String> map = new HashMap<String, String>();
for(int i=0;i < ute.length();i++){

JSONObject e = ute.getJSONObject(i);
System.out.println(e.getString("user"));



map.put("name", e.getString("user"));



mylist.add(map);
}

runOnUiThread(new Runnable() {


public void run() {

ListAdapter adapter = new SimpleAdapter(Utenti.this, mylist , R.layout.utentii,new String[] { "name" },new int[] { 1});
Utenti.this.setListAdapter(adapter);
}

});

} catch (JSONException e) {
System.out.println("4");
e.printStackTrace();
}

}
});
t.start();
// t.start();







}


public static JSONObject conn(String pagina){
HttpURLConnection connection;
OutputStreamWriter request = null;
URL url = null;
String response = null;
JSONObject jArray = null;


try
{
url = new URL("url"+pagina);
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestMethod("POST");


String line = "";

InputStreamReader isr = new InputStreamReader(connection.getInputStream());
BufferedReader reader = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
while ((line = reader.readLine()) != null)
{
sb.append(line + "\n");
}
response = sb.toString();
System.out.println(response);
try{jArray=new JSONObject (response);}
catch(JSONException e){}

isr.close();
reader.close();
}
catch(IOException e)
{
Log.i("NetworkTest","Network Error: " + e);
}
return jArray;
}}

utentii.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textSize="20sp" >

Image of the problem

最佳答案

没有。 runOnUiThread() 是必需的,因为您要调用 setListAdapter

再次。 -移动这两行

ListAdapter adapter = new SimpleAdapter(Utenti.this, mylist , R.layout.utentii,new String[] { "name" },new int[] { 1});
setListAdapter(adapter);

紧接在 onClick() 方法中的 for(){} 循环之后。

如果您确定您的 mylist 列表中填充了您的 json 调用中的数据。

基本上是这样的示例:

将您的 xml 文件内容替换为以下内容:

测试文件

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

对于 ListView 的行

行.xml

 <?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/textView" android:layout_gravity="center"/>
</LinearLayout>

然后是 onCreate():

  @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.test);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

StrictMode.setThreadPolicy(policy);

ListView lv = getListView();
populateListView();

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

populateListView();
}
});

}

private void populateListView(){

Thread t = new Thread(new Runnable (){

public void run() {

JSONObject json = getUserObject("http://myhost:8080/login/email");
Log.i("json",json.toString());

try {
//Get the element that holds the earthquakes ( JSONArray )
JSONArray friends = json.getJSONObject("user").getJSONArray("friends");

final List<Map<String, String>> mylist =
new ArrayList<Map<String, String>>();

//get list of friend ids in the user object
for(int i=0;i < friends.length();i++){
Map<String,String> map = new LinkedHashMap<String, String>();
map.put("friendid", friends.getString(i));
mylist.add(map);

}
runOnUiThread(new Runnable() {
public void run() {
ListAdapter adapter = new SimpleAdapter(MyTestListActivity.this, mylist , R.layout.row,new String[] { "friendid" },new int[] {R.id.textView});
setListAdapter(adapter);
}
});

} catch (JSONException e) {
System.out.println("4");
e.printStackTrace();
}

}
});
t.start();

}

public static JSONObject getUserObject(String page){

JSONObject jArray = null;

try
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(page);

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("user", "test"));
nameValuePairs.add(new BasicNameValuePair("pwd", "test"));

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
String str = EntityUtils.toString(response.getEntity(), HTTP.UTF_8);
try{
jArray=new JSONObject (str);}
catch(JSONException e){Log.d("error",e);}

}
catch(Exception e)
{
Log.i("NetworkTest", "Network Error: " + e);
}
return jArray;
}

希望这对 abit 有帮助。

关于android - Android ListView 中的 JSONArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16194355/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com