我知道这个问题不断出现,但我的代码与其他代码略有不同,所以我不知道我需要在哪里进行更改。
我想将数据(“fest_name”)放入ArrayList
(“节日”)并将其显示在ListView
中。
这是我的JSON代码:
public void getFestivals() {
Thread thread_getdata = new Thread(new Runnable() {
@Override
public void run() {
try {
HttpClient httpclient = new DefaultHttpClient();
String link = "http://pou-pou.de/stagedriver/android/uebersicht.php";
HttpPost httppost = new HttpPost(link);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
final String response = httpclient.execute(httppost,
responseHandler);
final ArrayList<String> festivals = new ArrayList<String>();
Log.i("Response", "Response : " + response);
JSONArray jsonarray = new JSONArray(response);
for (int i = 0; i < jsonarray.length(); i++) {
JSONObject jsonobj = jsonarray.getJSONObject(i);
final String fest_name = jsonobj.getString("fest_name");
festivals.add(fest_name);
runOnUiThread(new Runnable() {
@Override
public void run() {
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread_getdata.start();
}
这适用于ListView:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fahrt_anbieten1);
ListView lvFestivals = (ListView) findViewById(R.id.lvFestivals);
getFestivals();
ListAdapter festivalsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, festivals);
lvFestivals.setAdapter(festivalsAdapter);
}
我只是不知道如何结合这两个:如果我运行应用程序,我只是得到一个空页,但没有真正的错误。
如果有人能提供帮助,我会很高兴的!
答案 0 :(得分:0)
如果放入循环
,适配器不成问题public void getFestivals() {
Thread thread_getdata = new Thread(new Runnable() {
@Override
public void run() {
try {
HttpClient httpclient = new DefaultHttpClient();
String link = "http://pou-pou.de/stagedriver/android/uebersicht.php";
HttpPost httppost = new HttpPost(link);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
final String response = httpclient.execute(httppost,
responseHandler);
final ArrayList<String> festivals = new ArrayList<String>();
Log.i("Response", "Response : " + response);
JSONArray jsonarray = new JSONArray(response);
for (int i = 0; i < jsonarray.length(); i++) {
JSONObject jsonobj = jsonarray.getJSONObject(i);
final String fest_name = jsonobj.getString("fest_name");
festivals.add(fest_name);
runOnUiThread(new Runnable() {
@Override
public void run() {
}
});
}
ListAdapter festivalsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, festivals);
lvFestivals.setAdapter(festivalsAdapter);
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread_getdata.start();
}
将它放在ListView变量OnCreate
上ListView lvFestivals;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fahrt_anbieten1);
lvFestivals = (ListView) findViewById(R.id.lvFestivals);
getFestivals();
}
答案 1 :(得分:0)
首先,不建议使用Thread发出网络请求。
其次,Apache HTTP在简单的网络请求周围有一些额外的代码。如果您可以改为使用Volley(您需要compile 'com.android.volley:volley:1.0.0'
)
如果您实施以下代码,则应获得something like this listview。
public class FestListActivity extends AppCompatActivity
implements Response.Listener<JSONArray>, Response.ErrorListener {
private ListView mListView;
private ArrayAdapter<String> mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(android.R.layout.list_content);
mListView = (ListView) findViewById(android.R.id.list);
mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
mListView.setAdapter(mAdapter);
getFestivals();
}
private void getFestivals() {
String festURL = "http://pou-pou.de/stagedriver/android/uebersicht.php";
RequestQueue queue = Volley.newRequestQueue(this);
JsonArrayRequest req = new JsonArrayRequest(festURL, this, this);
queue.add(req);
}
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Error", error.getMessage());
}
@Override
public void onResponse(JSONArray response) {
mAdapter.clear();
try {
for (int i = 0; i < response.length(); i++) {
final JSONObject festObj = response.getJSONObject(i);
int festId = Integer.valueOf(festObj.getString("id_fest"));
String festName = festObj.getString("fest_name");
mAdapter.add(festId + " - " + festName);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}