Android 如何在同一个片段中从json向服务器和即时更新listview发送数据
如何将数据发送到服务器并使用发送的数据更新该服务器的listview?请注意,数据发送进程和listview位于同一个片段中 这是我的密码。它可以工作,但当我发送数据并打开同一活动时,它没有更新,大学名称和组名称不显示或为空,但当转到其他活动并返回到它时,listview会更新Android 如何在同一个片段中从json向服务器和即时更新listview发送数据,android,json,listview,fragment,android-volley,Android,Json,Listview,Fragment,Android Volley,如何将数据发送到服务器并使用发送的数据更新该服务器的listview?请注意,数据发送进程和listview位于同一个片段中 这是我的密码。它可以工作,但当我发送数据并打开同一活动时,它没有更新,大学名称和组名称不显示或为空,但当转到其他活动并返回到它时,listview会更新 public class GroupWallActivity extends AppCompatActivity { ImageView groupProPic; TextView groupName;
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);
}
}
公共类GroupWallActivity扩展了AppCompatActivity{
ImageView组Propic;
文本视图组名;
TextView大学;
字符串userIdString;
公共字符串groupIdString;
字符串组名称字符串;
字符串大学名称字符串;
私有进程对话;
私有SQLiteHandler数据库;
私人会话管理器会话;
零碎的一个零碎的一个;
碎片2碎片2;
私人摊位摊位;
私人视页机视页机;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u group\u wall);
groupName=(TextView)findViewById(R.id.groupNameTV);
varsity=(TextView)findViewById(R.id.varsityTV);
viewPager=(viewPager)findViewById(R.id.viewPager);
设置viewPager(viewPager);
tabLayout=(tabLayout)findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
//SqLite数据库处理程序
db=新的SQLiteHandler(getApplicationContext());
//会话管理器
session=newsessionmanager(getApplicationContext());
如果(!session.isLoggedIn()){
logoutUser();
}
groupNameString=getIntent().getStringExtra(“GroupName”);
universityNameString=getIntent().getStringExtra(“UniversityName”);
groupName.setText(groupNameString);
大学名称;
viewPager.addOnPageChangeListener(新的viewPager.OnPageChangeListener(){
@凌驾
已滚动页面上的公共无效(int-position、float-positionOffset、int-positionOffsetPixels){
}
@凌驾
已选择页面上的公共无效(内部位置){
}
@凌驾
公共无效onPageScrollStateChanged(int状态){
}
});
}
公共无效设置ViewPager(ViewPager ViewPager){
ViewPagerAdapter适配器=新的ViewPagerAdapter(getSupportFragmentManager());
groupIdString=getIntent().getStringExtra(“GroupId”);
userIdString=getIntent().getStringExtra(“UserId”);
Bundle fragmentOneBundle=新Bundle();
putString(“group_id”,groupIdString);
putString(“userId”,userIdString);
putString(“groupName”,groupNameString);
putString(“universityName”,universityNameString);
fragmentOne=新的fragmentOne();
fragmentOne.setArguments(fragmentOneBundle);
Bundle fragmentTwoBundle=新Bundle();
fragmentTwoBundle.putString(“组id”,groupIdString);
fragmentTwo=新的fragmentTwo();
fragmentTwo.setArguments(fragmentTwoBundle);
adapter.addFragment(fragmentOne,“Post”);
adapter.addFragment(fragmentTwo,“成员”);
viewPager.setAdapter(适配器);
}
类ViewPagerAdapter扩展了FragmentPagerAdapter{
私有最终列表MFFragmentList=new ArrayList();
私有最终列表MFFragmentTitleList=new ArrayList();
public ViewPagerAdapter(android.support.v4.app.FragmentManager){
高级经理;
}
@凌驾
公共片段getItem(int位置){
返回MFFragmentList.get(位置);
}
@凌驾
public int getCount(){
返回MFFragmentList.size();
}
public void addFragment(片段片段,字符串标题){
添加(片段);
MFFragmentTitleList.add(标题);
}
@凌驾
公共字符序列getPageTitle(int位置){
返回MFFragmentTitleList.get(位置);
}
}
私有void logoutUser(){
session.setLogin(false);
db.deleteUsers();
//启动登录活动
意向意向=新意向(GroupWallActivity.this、LoginActivity.class);
星触觉(意向);
完成();
}
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.appbar_菜单,菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
//noinspection SimplifiableIf语句
if(id==R.id.logout){
logoutUser();
}
返回super.onOptionsItemSelected(项目);
}
}
碎片
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);
}
}
公共类FragmentOne扩展片段实现View.OnClickListener{
私有静态最终字符串标记=FragmentOne.class.getSimpleName();
私有进程对话;
私人摊位摊位;
私人视页机视页机;
按钮postButton;
编辑文本postText;
ListView-postListView;
私有字符串groupIdString;
私有字符串userIdString;
私有字符串postBody;
私有字符串groupNameString;
私立字符串大学名称字符串;
私有SQLiteHandler数据库;
ArrayList postList;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图v