Android 将单击位置的JSON数据发送到另一个活动

Android 将单击位置的JSON数据发送到另一个活动,android,json,android-recyclerview,Android,Json,Android Recyclerview,我的活动中有一个RecyclerView,我从服务器的JSON数据填充它。但我想将单击位置的数据发送到另一个活动,然后我可以编辑它们并将它们发送回服务器。但当我将数据发送到另一个活动时,所有JSON数组都会发送到另一个活动,并创建下一个活动的几个实例。下面是我的包含RecyclerView的活动: public class ActivityAllUsers extends AppCompatActivity { List<GetDataAdapter> GetDataAdapter

我的活动中有一个RecyclerView,我从服务器的JSON数据填充它。但我想将单击位置的数据发送到另一个活动,然后我可以编辑它们并将它们发送回服务器。但当我将数据发送到另一个活动时,所有JSON数组都会发送到另一个活动,并创建下一个活动的几个实例。下面是我的包含RecyclerView的活动:

public class ActivityAllUsers extends AppCompatActivity {

List<GetDataAdapter> GetDataAdapter1;

RecyclerView recyclerView;

RecyclerView.LayoutManager recyclerViewlayoutManager;

RecyclerView.Adapter recyclerViewadapter;

ProgressBar progressBar;

String GET_JSON_DATA_HTTP_URL = "http://shayea.tk/sof/get_allusers.php";
String JSON_USERNAME = "usr_name";
String JSON_EMAIL = "usr_email";
String JSON_PHONE = "usr_phone";
String JSON_ORG = "org_name";
String JSON_STATUS ="usr_status";
String JSON_USRTYPE ="prv_name";

JsonArrayRequest jsonArrayRequest ;

RequestQueue requestQueue ;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_all_users);
    GetDataAdapter1 = new ArrayList<>();
    recyclerView = (RecyclerView) findViewById(R.id.recyclerView1);
    progressBar = (ProgressBar) findViewById(R.id.progressBar1);
    recyclerView.setHasFixedSize(true);
    recyclerViewlayoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(recyclerViewlayoutManager);
    JSON_DATA_WEB_CALL();
    progressBar.setVisibility(View.VISIBLE);




}

public void JSON_DATA_WEB_CALL(){

    jsonArrayRequest = new JsonArrayRequest(GET_JSON_DATA_HTTP_URL,

            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {

                    progressBar.setVisibility(View.GONE);

                    JSON_PARSE_DATA_AFTER_WEBCALL(response);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                }
            });

    requestQueue = Volley.newRequestQueue(this);

    requestQueue.add(jsonArrayRequest);
}

public void JSON_PARSE_DATA_AFTER_WEBCALL(final JSONArray array){

    for(int i = 0; i<array.length(); i++) {

        final GetDataAdapter GetDataAdapter2 = new GetDataAdapter();

        JSONObject json = null;
        try {
            json = array.getJSONObject(i);

            GetDataAdapter2.setusername(json.getString(JSON_USERNAME));

            GetDataAdapter2.setEmail(json.getString(JSON_EMAIL));

            GetDataAdapter2.setPhone_number(json.getString(JSON_PHONE));

            GetDataAdapter2.setPrivilege(json.getString(JSON_USRTYPE));

            GetDataAdapter2.setOrganization(json.getString(JSON_ORG));

            GetDataAdapter2.setStatus(json.getString(JSON_STATUS));

            Log.e("JSON ME :" , json.toString());

            final String username = (json.getString(JSON_USERNAME));
            final String email = (json.getString(JSON_USERNAME));
            final String phone = (json.getString(JSON_USERNAME));
            final String usertype = (json.getString(JSON_USERNAME));

            recyclerView.addOnItemTouchListener(
                    new RecyclerTouchListener(getApplicationContext(), recyclerView,
                            new RecyclerTouchListener.OnTouchActionListener() {
                                @Override
                                public void onClick(View view, int position) {

                                    Intent intent = new Intent(ActivityAllUsers.this,RegisterNewCompany.class);
                                    intent.putExtra("username" , username);
                                    intent.putExtra("email" , email);
                                    intent.putExtra("phone" , phone);
                                    intent.putExtra("usertype" , usertype);
                                    startActivity(intent);

                                }
                                @Override
                                public void onRightSwipe(View view, int position) {
                                }
                                @Override
                                public void onLeftSwipe(View view, int position) {
                                }
                            }));

        } catch (JSONException e) {

            e.printStackTrace();
        }
        GetDataAdapter1.add(GetDataAdapter2);
    }

    recyclerViewadapter = new RecyclerViewAdapter(GetDataAdapter1, this);

    recyclerView.setAdapter(recyclerViewadapter);
}
}
我已经检查了这类主题的大多数问题,但是它们的实现是不同的。
任何帮助都将不胜感激

我可以看到您正在为for循环的每个迭代添加一个触控监听器<代码>recyclerView.addOnItemTouchListener

您应该确保只执行一次
recyclerView.addonimtouchlistener
。使用
onClick
方法中的
int-position
参数获取被触摸/单击的项目

例如:

单击editem=array.getJSONObject(位置);

发生的情况是:
如果数组长度为10,则将10个itemTouchListeners添加到回收器视图中。这意味着在touch上,所有10个侦听器都按照您添加它们的顺序被调用。因此,解释了下一个活动的几个实例。此外,每个侦听器都使用不同的项调用它-因此看起来所有json都被传递了。启动活动时,可以传递一些标志,以确保一次只存在一个实例。花些时间来

我将
recyclerView.AddonimtouchListener
移出循环,现在它没有打开活动的多个实例,但我无法通过此代码将数据发送到其他活动
clickedItem=array.getJSONObject(位置)你能给我一点指导或编辑点击某个项目的代码吗
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {

Context context;

List<GetDataAdapter> getDataAdapter;

public RecyclerViewAdapter(List<GetDataAdapter> getDataAdapter, Context context){

    super();

    this.getDataAdapter = getDataAdapter;
    this.context = context;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_items, parent, false);

    ViewHolder viewHolder = new ViewHolder(v);

    return viewHolder;
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {

    GetDataAdapter getDataAdapter1 =  getDataAdapter.get(position);

    holder.UsernameTV.setText(getDataAdapter1.getusername());

    holder.EmailTV.setText(String.valueOf(getDataAdapter1.getEmail()));

    holder.PhoneNumberTextView.setText(getDataAdapter1.getPhone_number());

    holder.PrivilegeTV.setText(getDataAdapter1.getPrivilege());

    holder.OrganizationTV.setText(getDataAdapter1.getOrganization());

    holder.statusTV.setText(getDataAdapter1.getStatus());

}

@Override
public int getItemCount() {

    return getDataAdapter.size();
}

class ViewHolder extends RecyclerView.ViewHolder{

    public TextView UsernameTV;
    public TextView EmailTV;
    public TextView PhoneNumberTextView;
    public TextView PrivilegeTV;
    public TextView OrganizationTV;
    public TextView statusTV;


    public ViewHolder(View itemView) {

        super(itemView);

        UsernameTV = (TextView) itemView.findViewById(R.id.textView2) ;
        EmailTV = (TextView) itemView.findViewById(R.id.textView4) ;
        PhoneNumberTextView = (TextView) itemView.findViewById(R.id.textView6) ;
        PrivilegeTV = (TextView) itemView.findViewById(R.id.textView8) ;
        OrganizationTV = (TextView) itemView.findViewById(R.id.textView10);
        statusTV = (TextView) itemView.findViewById(R.id.textView12);
    }
}
}
public class GetDataAdapter {

String username;
String phone_number;
String privilege;
String Email;
String organization;
String status;

public String getusername() {

    return username;
}

public void setusername(String username1) {

    this.username = username1;
}
public String getEmail() {

    return Email;
}

public void setEmail(String email1) {

    this.Email = email1;
}

public String getPrivilege() {

    return privilege;
}

public void setPrivilege(String privilege1) {

    this.privilege = privilege1;
}

public String getOrganization() {

    return organization;
}

public void setOrganization(String organization1) {

    this.organization = organization1;
}

public String getStatus() {

    return status;
}

public void setStatus(String status1) {

    this.status = status1;
}

public String getPhone_number() {

    return phone_number;
}

public void setPhone_number(String phone_number1) {

    this.phone_number = phone_number1;
}

}