我正在使用Android ListView进行操作,但遇到一个问题。我在XML文件installation.xml中创建了一个列表视图,我想在我的Searchdata.java中使用该列表视图。所以基本上我想要的是,当我单击searchdata按钮时,将从Web服务中获取数据并解析后将其保存到listview中。当我单击Installation View按钮时,将出现一个新窗口,在那里我可以看到该列表数据。
SearchData.java
public class SearchData extends Activity {
EditText Keyword;
JSONParser jsonparser = new JSONParser();
ListView Datalist;
HorizontalScrollView VideoDatalist;
ArrayList<HashMap<String, String>> DataList;
ArrayList<HashMap<String, String>> VideoDataList;
JSONArray contacts = null;
private ProgressDialog pDialog;
ImageButton searchdata,InstallationView;
String Keyvalue = new String();
private static final String TAG_InnerText = "InnerText";
private static final String TAG_Title = "Title";
private static final String TAG_URL = "URL";
private static final String TAG_VIDEO_URL = "URL";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_data);
InstallationView=(ImageButton)findViewById(R.id.InstallationView);
Keyword = (EditText) findViewById(R.id.KeyData);
Datalist=(ListView)findViewById(R.layout.activity_installation);
VideoDatalist=(HorizontalScrollView)findViewById(R.id.Horizontallist);
searchdata=(ImageButton)findViewById(R.id.searchicon);
String Keyvalue = new String();
DataList = new ArrayList<HashMap<String, String>>();
VideoDataList = new ArrayList<HashMap<String, String>>();
searchdata.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
new ReadData().execute();
}
});
InstallationView.setOnClickListener(new View.OnClickListener(){
public void onClick(View v)
{
startActivity(new Intent(SearchData.this, Installation.class));
}
});
}
public class ReadData extends AsyncTask<Void, Void, Void>
{
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(SearchData.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
}
protected Void doInBackground(Void... arg0) {
try{
Keyvalue=Keyword.getText().toString();
String Jsonstr = jsonparser.makeHttpRequest("http://10.47.93.26:8080/Search/api/Search/"+Keyvalue);
try {
if (Jsonstr != null) {
JSONArray jsonObj = new JSONArray (Jsonstr);
for (int i = 0; i < jsonObj.length(); i++) {
JSONObject c = jsonObj.getJSONObject(i);
String name = c.optString(TAG_Title);
String url = c.optString(TAG_URL);
HashMap<String, String> info = new HashMap<String, String>();
if( !name.isEmpty() )
{
info.put(TAG_Title, name);
}
else
{
info.put(TAG_Title,"User Manual");
}
if(url.contains("youtube"))
{
info.put(TAG_URL, url);
VideoDataList.add(info);
}
else
{
info.put(TAG_URL, url);
DataList.add(info);
}
}
}
else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}
}
catch (JSONException e) {
e.printStackTrace();
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if (pDialog.isShowing())
pDialog.dismiss();
SimpleAdapter adapter = new SimpleAdapter(
SearchData.this, DataList,
R.layout.list_item, new String[]
{
TAG_Title
}, new int[] {
R.id.InnerText });
Datalist.setAdapter(adapter);
}
}
}
Web服务正在运行,并且解析代码正在正确运行。我在发布方法时遇到错误,因此您可以在此方面帮助我。
错误
在onCreate(...)
SearchData的方法中Activity
,以下内容将永远无法工作,并且始终会返回“ null”(因此,您的NullPointerException)...
Datalist=(ListView)findViewById(R.layout.activity_installation);
调用findViewById(...)
仅适用于您在调用时已膨胀的UI元素setContentView(...)
。在这种情况下,您所使用R.layout.activity_search_data
的布局文件不包含ListView
ID为的ID,R.layout.activity_installation
顺便说一句,ID是布局文件的资源ID,而不是UI元素的资源ID。
可以做您需要做的唯一方法是Intent
在通话时将您的数据作为额外的使用。
startActivity(new Intent(SearchData.this, Installation.class));
...Activity
创建安装文件后,它将需要获取数据并创建自己的适配器。
编辑:HashMap
是Serializable
并且可以作为Intent
额外的传递。HashMap
如下传递您的数据列表...
Intent i = new Intent(SearchData.this, Installation.class);
i.putExtra("data_list", DataList);
startActivity(i);
在安装中,Activity
您可以使用...
getIntent().getSerializableExtra("data_list");
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句