私はAndroidプロジェクトで作業しています。ここに私の問題を知るために必要なものがあります。 (十分でない場合は教えてください):インターフェイスコールバックメソッドが呼び出されていませんか?
私はフラグメント、非同期タスク、および非同期応答という名前のインターフェイスを持っています。非同期タスクは独自のクラスに存在し、DownLoadRawDataと呼ばれます。ここでフラグメントのコードは次のとおりです。
public class RedditListFragment extends Fragment implements AsyncResponse{
private RecyclerView mRecyclerView;
private RedditAdapter mAdapter;
private Parser parse;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_reddit_list, container, false);
mRecyclerView = (RecyclerView) view.findViewById(R.id.reddit_list_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
executeAsyncTask();
updateUI();
// Inflate the layout for this fragment
return view;
}
**@Override
public void processFinish(String output) {
parse = new Parser(output);
Log.d("TAG", "The List to STring is " + parse.getRedditObjectList().toString());
Log.d("TAG", "process finished reached");
}**
public void executeAsyncTask(){
DownLoadRawData downLoadRawData = new DownLoadRawData();
downLoadRawData.delegate = this;
downLoadRawData.execute("https://www.reddit.com/r/Showerthoughts/.json");
// Log.d("ERR", " TEXT WAS " + jsonTEXT);
}
public void updateUI(){
List<RedditObject> listOfRedditObject = parse.getRedditObjectList();
mAdapter = new RedditAdapter(listOfRedditObject);
mRecyclerView.setAdapter(mAdapter);
}
private class RedditHolder extends RecyclerView.ViewHolder{
private TextView mTextView;
public RedditHolder(View itemView) {
super(itemView);
mTextView = (TextView) itemView; //by casting itemView to a TextView, this forces client to pass text view
}
}
private class RedditAdapter extends RecyclerView.Adapter<RedditHolder>{
private List<RedditObject> mListOfRedditObjects;
public RedditAdapter(List<RedditObject> listOfRedditObject){
mListOfRedditObjects = listOfRedditObject;
}
@Override
public RedditHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
View view = layoutInflater.inflate(R.layout.single_reddit_listing, parent, false);
return new RedditHolder(view);
}
@Override
public void onBindViewHolder(RedditHolder holder, int position) {
RedditObject redditObject = mListOfRedditObjects.get(position);
holder.mTextView.setText(redditObject.getmTitle());
}
@Override
public int getItemCount() {
return mListOfRedditObjects.size();
}
}
}
DownloadRawData非同期Taskクラスはここにある:
package com.example.ridhwaan.redditforfaez;
import android.os.AsyncTask;
import android.util.Log;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class DownLoadRawData extends AsyncTask<String, Void, String> {
private String mFileContents;
**public AsyncResponse delegate = null;**
public String getmFileContents() {
return mFileContents;
}
@Override
protected String doInBackground(String... strings) {
mFileContents = downloadRawJSON(strings[0]);
return mFileContents;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
**delegate.processFinish(result);**
Log.d("TAG", "RESULT" + result);
}
そしてAync応答:
public interface AsyncResponse {
void processFinish(String output);
}
Fo何らかの理由で、私のフラグメントクラスでは、プロセス終了メソッドが呼び出されていません。私の理解から、Async Responseは、パラメータが与えられたDownLoadRawデータクラスで実装されています。次に、デリゲートをフラグメントクラスに設定して、メソッドの結果を返すか、コールバックする準備ができます。その欠陥があれば私の理解で私を助けてください。
問題は、プロセス終了メソッドがまったく呼び出されていないことです。私が入れたログはプリントアウトされていませんが、どこにでもプリントアウトされています。
この問題の原因は何ですか?すべての
ログがOnPostExecuteであると、 – Ridhwaan
が表示されないようです。「DownLoadRawData」タスクが実行されていない可能性があります。コマンド 'new DownLoadRawData()。executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);で実行しようとしました。 ' – hyperloop
スレッドプールは、同時実行機能を利用するコードを変更しない限り、少し過剰な/非効率的です。彼はただ一つのスレッドを実行しようとしているように見えます。その場合、単純なスレッド+コールバックが簡単な答えかもしれません。 – mawalker