2017-05-17 2 views
-3
klicken

Wie analysiere ich JSON in Android, das beim Klicken seine JSON-URL ändert.So parsen Sie JSON, um die JSON-URL zu ändern, wenn Sie auf

Dies ist My MainActivity.java;

import android.app.ProgressDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 

import android.widget.ListView; 
import android.widget.Toast; 

import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.StringRequest; 
import com.android.volley.toolbox.Volley; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.ArrayList; 
import java.util.List; 

public class MainActivity extends AppCompatActivity { 

    private static final String URL_DATA ="http://example.com/app_services.php?d="; 


    private RecyclerView recyclerView; 
    ListView listView; 
    private RecyclerView.Adapter adapter; 

    private List<ListItem> listItems; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     recyclerView = (RecyclerView) findViewById(R.id.myrecyclerView); 
     recyclerView.setHasFixedSize(true); 
     recyclerView.setLayoutManager(new LinearLayoutManager(this)); 

     listItems = new ArrayList<>(); 

     loadRecyclerViewData(); 

    } 

    private void loadRecyclerViewData(){ 

     final ProgressDialog progressDialog = new ProgressDialog(this); 
     progressDialog.setMessage("Loading News..."); 
     progressDialog.show(); 

     StringRequest stringRequest = new StringRequest(Request.Method.GET, 
       URL_DATA, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         progressDialog.dismiss(); 

         try { 
          JSONObject jsonObject = new JSONObject(response); 
          JSONArray array = jsonObject.getJSONArray("category"); 

          for (int i =0; i<array.length();i++){ 
           JSONObject o = array.getJSONObject(i); 
           ListItem item = new ListItem(
             o.getString("d"), 
             o.getString("dirtitle"), 
             o.getString("folder_image") 

           ); 

           listItems.add(item); 
          } 

          adapter = new MyAdapter(listItems,getApplicationContext()); 
          recyclerView.setAdapter(adapter); 




         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 

        } 
       }, 
       new Response.ErrorListener() { 
        @Override 

        public void onErrorResponse(VolleyError error) { 
         progressDialog.dismiss(); 
         Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show(); 

        } 
       }); 

     RequestQueue requestQueue = Volley.newRequestQueue(this); 
     requestQueue.add(stringRequest); 



    } 
} 

In diesem möchte ich die Url des Json, beim Klicken ändern. Von

http://example.com/app_services.php?d=

http://example.com/app_services.php?d=name

Die in diesem Beitrag verwendet die URL sind nicht die reale. Sie sind nur ein Beispiel. Und diese beiden URLs können verschiedene Objekte enthalten oder nicht.

+0

Wie wäre es damit, 'URL_DATA' nicht endgültig zu machen und nur die Variable mit' concat' oder 'append' zu ändern? – Nico

+0

eine Schnittstelle in recyclerview Adapter klicken und den Text beim Rückruf der Schnittstelle hinzufügen ... –

+0

Wie concat oder append mit meinem Code verwenden? Irgendeine Idee –

Antwort

0

Wenn Sie auf ein Element von RecyclerView klicken, um "Name" zum Ende der ursprünglichen URL hinzuzufügen, geben Sie einfach den folgenden Code in die RecyclerViewAdapter-Datei ein.

void onItemViewClick (View view) { 

    String name = "the name you want" 
    String url = URL_DATA+name; // 

    /* 
    * write the same codes as "loadRecyclerViewData" method, 
    * but just change URL_DATA to url. 
    * If the changed url has the different json format than the original one 
    * , you can modify some codes in "public void onResponse(String response)" method. 
    */ 

} 

Und der folgende Link enthält, wie onItemClickListener in RecyclerView hinzugefügt wird. Why doesn't RecyclerView have onItemClickListener()? And how RecyclerView is different from Listview?

Wenn Sie weitere Fragen haben, lassen Sie es mich bitte wissen. Vielen Dank.

+0

Ich habe keine Ahnung, wie mache ich das? –

+0

Haben Sie einen Artikel auf RecyclerView behandelt? Mit anderen Worten: Haben Sie onItemClickListener zu Elementen in RecyclerView hinzugefügt? @ArjunMartinez – Sunhee

+0

'@Override public void onBindViewHolder (ViewHolder-Halter, int-Position) { final ListItem listItem = listItems.get (position); holder.mLinearLayout.setOnClickListener (neu View.OnClickListener() { @Override public void onClick (Blick v) { String new_url = "listItem.getDescription()"; String URL_NEW_DATA = URL_DATA + new_url; } }); } ' Dies ist meine Adapterklasse. Ist das richtig? –

Verwandte Themen