我剛學過java,也是android應用程序開發。將JSON值解析爲ListView中的Activity。初學者
我已經能夠將json
對象填充到listview
從web-service
到我的NewActivity.class
。但通過將json
值從我的jsonparser
類解析爲我的DetailActivity.class
而在設置OnItemClickListener
for listview
時遇到問題。
我試着從這裏讀到一些答案,但在某個時候迷了路。如果有人提出意見,我會很高興。由於
JSON解析器類
public class JSONParser {
public static List<Events> parseFeed(String content) {
try {
JSONArray ar = new JSONArray(content);
List<Events> eventList = new ArrayList<>();
for (int i = 0; i < ar.length(); i++) {
JSONObject obj = ar.getJSONObject(i);
String headline = obj.optString("Content");
Events events = new Events();
events.setId(obj.getInt("id"));
events.setTitle(obj.getString("Title"));
events.setPostDate(obj.getString("PostDate"));
events.setSummary(obj.getString("Summary"));
events.setContent(obj.getString("Content"));
events.setPicture(obj.getString("Picture"));
eventList.add(events);
}
return eventList;
} catch (JSONException e) {
e.printStackTrace();
return null;
}
}
這是我的NewActivity.class。
public class NewActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
final String LOG = "ListActivity";
private List<Events> eventsList;
private ListView lvEvents;
ProgressBar pb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
lvEvents = (ListView) findViewById(R.id.listview1);
pb = (ProgressBar) findViewById(R.id.progressBar);
pb.setVisibility(View.INVISIBLE);
if (isOnline()){
requestData("http://json/events.php");
} else {
Toast.makeText(this, "No Internet Connection", Toast.LENGTH_LONG).show();
}
}
protected void updateDisplay() {
EventListAdapter adapter = new EventListAdapter(this, R.layout.mylist_view, eventsList);
lvEvents.setAdapter(adapter);
lvEvents.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(NewActivity.this, EventsDetail.class);
intent.putExtra("selectedEvents", eventlist[position]);
startActivity(intent);
}
private void requestData(String uri){
MyTask task = new MyTask();
task.execute(uri);
}
protected boolean isOnline(){
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netinfo = cm.getActiveNetworkInfo();
if (netinfo != null && netinfo.isConnectedOrConnecting()) {
return true;
} else {
return false;
}
}
public class MyTask extends AsyncTask<String, String, List<Events>> {
@Override
protected void onPreExecute() {
pb.setVisibility(View.VISIBLE);
}
@Override
protected List<Events> doInBackground(String... params) {
String data = HttpManager.getData(params[0]);
eventsList = JSONParser.parseFeed(data);
for (Events events : eventsList) {
try {
String imageUrl = events.getPicture();
InputStream imageRead = (InputStream) new URL(imageUrl).getContent();
Bitmap bitmap = BitmapFactory.decodeStream(imageRead);
events.setBitmap(bitmap);
imageRead.close();
} catch (Exception e){
e.printStackTrace();
}
}
return eventsList;
}
@Override
protected void onPostExecute(List<Events> results) {
eventsList = results;
updateDisplay();
pb.setVisibility(View.INVISIBLE);
}
}
這我Events.class
public class Events implements Serializable {
public int id;
public String Title;
public String PostDate;
public String Summary;
public String Content;
public String Picture;
public Bitmap bitmap;
public String getContent() {
return Content;
}
public void setContent(String content) {
Content = content;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPicture() {
return Picture;
}
public void setPicture(String picture) {
Picture = picture;
}
public String getPostDate() {
return PostDate;
}
public void setPostDate(String postDate) {
PostDate = postDate;
}
public String getSummary() {
return Summary;
}
public void setSummary(String summary) {
Summary = summary;
}
public String getTitle() {
return Title;
}
public void setTitle(String title) {
Title = title;
}
public Bitmap getBitmap() {
return bitmap;
}
public void setBitmap(Bitmap bitmap) {
this.bitmap = bitmap;
}
最後我DetailActivity.class其中有三個TextView的接收JSON值
public class EventsDetail extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_events_detail);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
TextView detailname = (TextView) findViewById(R.id.detailTitle);
TextView eventDetail = (TextView) findViewById(R.id.detailContent);
TextView eventDate = (TextView) findViewById(R.id.detailDate);
}
你必須通過選定的事件作爲一個爭議,意圖是你已經創建了調用事件詳細信息活動這是所有的朋友:) –
@Phrytz,你有沒有嘗試過我的解決方案? –
是的,但也許我做得不對。我認爲你必須看看NewActivity.class是如何構建的。我編輯了我的NewActivity.class看看。 @SandeepBhandari – Phrytz