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" >
答案 0 :(得分:2)
没有。 runOnUiThread()是必要的,因为你想调用setListAdapter
。
一次。 - 移动这两行
ListAdapter adapter = new SimpleAdapter(Utenti.this, mylist , R.layout.utentii,new String[] { "name" },new int[] { 1});
setListAdapter(adapter);
在for(){}
方法的onClick()
循环之后。
如果您确定您的mylist
列表中填充了json调用中的数据。
基本上这样的样本:
使用以下内容替换xml文件内容:
test.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的行
row.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;
}
希望这有助于升技。