1
私はどのようにデータをサーバに送信し、そのサーバからリストビューを送信したデータで更新できますか?データ送信プロセスとリストビューは同じフラグメントにあることに注意してください。どのように私は同じフラグメント内のjsonからサーバとインスタントアップデートリストビューを送ることができます
ここに私のコードです。それは動作しますが、データを送信して同じアクティビティを開くと更新されず、大学名とグループ名が表示されないか、nullになりますが、他のアクティビティに移動して戻ると、リストビューが更新されます。
public class GroupWallActivity extends AppCompatActivity {
ImageView groupProPic;
TextView groupName;
TextView varsity;
String userIdString;
public String groupIdString;
String groupNameString;
String universityNameString;
private ProgressDialog progressDialog;
private SQLiteHandler db;
private SessionManager session;
FragmentOne fragmentOne;
FragmentTwo fragmentTwo;
private TabLayout tabLayout;
private ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_group_wall);
groupName= (TextView) findViewById(R.id.groupNameTV);
varsity= (TextView) findViewById(R.id.varsityTV);
viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
// SqLite database handler
db = new SQLiteHandler(getApplicationContext());
// session manager
session = new SessionManager(getApplicationContext());
if (!session.isLoggedIn()) {
logoutUser();
}
groupNameString=getIntent().getStringExtra("GroupName");
universityNameString=getIntent().getStringExtra("UniversityName");
groupName.setText(groupNameString);
varsity.setText(universityNameString);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
public void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
groupIdString=getIntent().getStringExtra("GroupId");
userIdString=getIntent().getStringExtra("UserId");
Bundle fragmentOneBundle = new Bundle();
fragmentOneBundle.putString("group_id", groupIdString);
fragmentOneBundle.putString("userId",userIdString);
fragmentOneBundle.putString("groupName",groupNameString);
fragmentOneBundle.putString("universityName",universityNameString);
fragmentOne = new FragmentOne();
fragmentOne.setArguments(fragmentOneBundle);
Bundle fragmentTwoBundle=new Bundle();
fragmentTwoBundle.putString("group_id", groupIdString);
fragmentTwo = new FragmentTwo();
fragmentTwo.setArguments(fragmentTwoBundle);
adapter.addFragment(fragmentOne, "Post");
adapter.addFragment(fragmentTwo, "Member");
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(android.support.v4.app.FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
private void logoutUser() {
session.setLogin(false);
db.deleteUsers();
// Launching the login activity
Intent intent = new Intent(GroupWallActivity.this, LoginActivity.class);
startActivity(intent);
finish();
}
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.appbar_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.logout) {
logoutUser();
}
return super.onOptionsItemSelected(item);
}
}
FRAGMENT
public class FragmentOne extends Fragment implements View.OnClickListener {
private static final String TAG = FragmentOne.class.getSimpleName();
private ProgressDialog progressDialog;
private TabLayout tabLayout;
private ViewPager viewPager;
Button postButton;
EditText postText;
ListView postListView;
private String groupIdString;
private String userIdString;
private String postBody;
private String groupNameString;
private String universityNameString;
private SQLiteHandler db;
ArrayList<PostModel> postList;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view=inflater.inflate(R.layout.fragment_one, container, false);
postButton= (Button) view.findViewById(R.id.postBtn);
postText= (EditText) view.findViewById(R.id.postTextET);
postListView= (ListView) view.findViewById(R.id.postListLV);
groupIdString =getArguments().getString("group_id");
userIdString =getArguments().getString("userId");
groupNameString=getArguments().getString("groupName");
universityNameString=getArguments().getString("universityName");
progressDialog = new ProgressDialog(getActivity().getApplicationContext());
progressDialog.setCancelable(false);
db = new SQLiteHandler(getActivity().getApplicationContext());
postList=db.getPostFromPostTable(groupIdString);
if(postList.size()!=0 && postList.size()>0) {
final CustomAdapterPost customAdapterPost = new CustomAdapterPost(getActivity().getApplicationContext(), 0, postList);
postListView.setAdapter(customAdapterPost);
}
postButton.setOnClickListener(this);
return view;
}
@Override
public void onClick(View view) {
postBody=postText.getText().toString().trim();
postAnnouncement(userIdString,groupIdString,postBody);
}
private void postAnnouncement(final String userId,final String groupId,final String postBody) {
String tag_string_req = "req_register";
progressDialog.setMessage("Posting ...");
StringRequest strReq = new StringRequest(Request.Method.POST,
AppConfig.URL_POST, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, "Post Response: " + response.toString());
try {
JSONObject jObj = new JSONObject(response);
boolean error = jObj.getBoolean("error");
if (!error) {
// User successfully stored in MySQL
// Now store the user in sqlite
JSONArray groupArray = jObj.optJSONArray("mypost");
for(int i=0; i < groupArray.length(); i++){
JSONObject post = groupArray.getJSONObject(i);
String postUniqueId = post.getString("post_unique_id");
String userUniqueId = post.getString("user_unique_id");
String groupUniqueId= post.getString("group_unique_id");
String userName = post.getString("user_name");
String postBody = post.getString("post_body");
String createdAt = post.getString("created_at");
// Inserting row in table
db.addPostToPostTable(postUniqueId, userUniqueId, groupUniqueId, userName, postBody, createdAt);
}
// Launch GroupWall activity
Intent intent = new Intent(getActivity().getApplicationContext(), GroupWallActivity.class);
intent.putExtra("UserId",userIdString);
intent.putExtra("GroupId",groupIdString);
intent.putExtra("GroupName",groupNameString);
intent.putExtra("UniversityName",universityNameString);
startActivity(intent);
} else {
// Error occurred in registration. Get the error
// message
String errorMsg = jObj.getString("error_msg");
Toast.makeText(getActivity().getApplicationContext(),
errorMsg, Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Post Error: " + error.getMessage());
Toast.makeText(getActivity().getApplicationContext(),
error.getMessage(), Toast.LENGTH_LONG).show();
}
}) {
@Override
protected Map<String, String> getParams() {
// Posting params to register url
Map<String, String> params = new HashMap<String, String>();
params.put("user_unique_id", userId);
params.put("group_unique_id", groupId);
params.put("post_body", postBody);
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext());
requestQueue.add(strReq);
}
}