2017-06-14 4 views
-1

onResponse() volleyからonCreate()に値を返すにはどうすればよいですか?onResponse volleyからonCreateに値を返すにはどうすればよいですか?

ベローソースコードでは、jsonInstagramListonCreate()に返す必要があります。

public class MainActivity extends Activity { 
    private static final String ENDPOINT = "https://......."; 

    private RequestQueue requestQueue; 
    private Gson gson; 
    private RecyclerView start_recyclerView; 
    private Adapter mAdapter; 
    protected Handler handler; 
    private List<JsonInstagram> jsonInstagramList; 

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

     start_recyclerView = (RecyclerView) findViewById(R.id.start_recyclerView); 
     start_recyclerView.setLayoutManager(new LinearLayoutManager(this)); 
     start_recyclerView.setItemAnimator(new DefaultItemAnimator()); 

     requestQueue = Volley.newRequestQueue(getApplicationContext()); 
     GsonBuilder gsonBuilder = new GsonBuilder(); 
     gsonBuilder.setDateFormat("M/d/yy hh:mm a"); 
     gson = gsonBuilder.create(); 

     fetchPosts(); 

    } 

    private void fetchPosts() { 
     StringRequest request = new StringRequest(Request.Method.GET, ENDPOINT, onPostsLoaded, onPostsError); 
     requestQueue.add(request); 
    } 



    private final Response.Listener<String> onPostsLoaded = new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      Document doc = Jsoup.parse(response); 
      Element links = doc.select("script").get(3); 
      String content = links.html(); 
      String res1 = content.replaceAll("window._sharedData = ", ""); 
      String finalRes = res1.replaceAll("\\}\\;", "}"); 

      jsonInstagramList = Collections.singletonList(gson.fromJson(finalRes, JsonInstagram.class)); 
      mAdapter = new Adapter(
        jsonInstagramList.get(0).getEntryData().getProfilePage().get(0).getUser().getMedia().getNodes(), 
        start_recyclerView 
      ); 
      start_recyclerView.setAdapter(mAdapter); 

     } 
    }; 

    private final Response.ErrorListener onPostsError = new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e(MainActivity.class.getSimpleName(), error.toString()); 
     } 
    }; 
} 

答えて

0

要求が完了したら、あなたは、onResponseは()コールバックメソッドで、非同期要求のために、それが呼び出されることができないので、あなたがそこから値を返すことはできません。

あなたはonResponse()内側からjsonInstagramListでやりたいものは何でも行うことができますか、あなたはそれに対処したい別のメソッドを呼び出すことができますがjsonInstagramList

例:

public void onResponse(){ 
//...code ... 
    doSomething(jsonInstagramList); 
} 
関連する問題