2017-01-18 6 views
0

RestApiでMS SQL Serverのデータを取得しましたが、Recyclerviewに設定できません。私はDataBaseの名前と画像のURLの2つのStringオブジェクトを読んでいます。RecyclerviewとRestApi

私はちょうど Recyclerviewadapter

上のデータを設定することはできません

私を助けたり、私に見せて下さい正しい例

MainActivity.java

public class MainActivity extends AppCompatActivity { 

private List<SingleItemModel> feedsList; 
private RecyclerView mRecyclerView; 
private MyRecyclerViewAdapter adapter; 
private ProgressBar progressBar; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 

    mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 
    progressBar = (ProgressBar) findViewById(R.id.progress_bar); 

    new AsyncLoadDeptDetails().execute(); 
} 


protected class AsyncLoadDeptDetails extends 
     AsyncTask<Void, JSONObject, ArrayList<SingleItemModel>> { 
    ArrayList<SingleItemModel> recModel = null; 

    @SuppressWarnings("WrongThread") 
    @Override 
    protected ArrayList<SingleItemModel> doInBackground(Void... params) { 
     // TODO Auto-generated method stub 

     RestAPI api = new RestAPI(); 
     try { 

      JSONObject jsonObj = api.SingleItemModel(); 

      JSONParser parser = new JSONParser(); 
      recModel = parser.parseDepartment(jsonObj); 
      adapter = new MyRecyclerViewAdapter(MainActivity.this, feedsList); 
      mRecyclerView.setAdapter(adapter); 
      feedsList = new ArrayList<>(); 

      for (int i = 0; i < jsonObj.length(); i++) { 
       JSONObject post = jsonObj.optJSONObject(String.valueOf(i)); 
       SingleItemModel item = new SingleItemModel(i); 
       item.setName(post.optString("title")); 
       item.setUrl(post.optString("thumbnail")); 
       feedsList.add(item); 
      } 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      Log.d("AsyncLoadDeptDetails", e.getMessage()); 

     } 
     return recModel; 
    } 
    } 
} 

SingleItemModel

public class SingleItemModel { 


private String name; 
private String url; 


public SingleItemModel(String name, String url) { 
    this.name = name; 
    this.url = url; 
} 



public String getUrl() { 
    return url; 
} 

public void setUrl(String url) { 
    this.url = url; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

}

MyRecyclerViewAdapter

public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.CustomViewHolder> { 
private List<SingleItemModel> singleItemList; 
private Context mContext; 
private OnItemClickListener onItemClickListener; 

public MyRecyclerViewAdapter(Context context, List<SingleItemModel> singleItemList) { 
    this.singleItemList = singleItemList; 
    this.mContext = context; 
} 

@Override 
public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_row, null); 
    CustomViewHolder viewHolder = new CustomViewHolder(view); 
    return viewHolder; 
} 

@Override 
public void onBindViewHolder(CustomViewHolder customViewHolder, int i) { 
    final SingleItemModel feedItem = singleItemList.get(i); 

    //Download image using picasso library 
    if (!TextUtils.isEmpty(feedItem.getUrl())) { 
     Picasso.with(mContext).load(feedItem.getUrl()) 
       .error(R.drawable.placeholder) 
       .placeholder(R.drawable.placeholder) 
       .into(customViewHolder.imageView); 
    } 

    //Setting text view title 
    customViewHolder.textView.setText(feedItem.getName()); 


    View.OnClickListener listener = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      onItemClickListener.onItemClick(feedItem); 
     } 
    }; 
    customViewHolder.imageView.setOnClickListener(listener); 
    customViewHolder.textView.setOnClickListener(listener); 
} 

@Override 
public int getItemCount() { 
    return (null != singleItemList ? singleItemList.size() : 0); 
} 


class CustomViewHolder extends RecyclerView.ViewHolder { 
    protected ImageView imageView; 
    protected TextView textView; 

    public CustomViewHolder(View view) { 
     super(view); 
     this.imageView = (ImageView) view.findViewById(R.id.thumbnail); 
     this.textView = (TextView) view.findViewById(R.id.title); 
    } 
} 


public OnItemClickListener getOnItemClickListener() { 
    return onItemClickListener; 
} 

public void setOnItemClickListener(OnItemClickListener onItemClickListener) { 
    this.onItemClickListener = onItemClickListener; 
} 

}

答えて

1
private List<SingleItemModel> feedsList; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    feedList = new ArrayList<SingleItemModle>(); 
    adapter = new MyRecyclerViewAdapter(MainActivity.this, feedsList); 
    mRecyclerView.setAdapter(adapter); 

オーバーライドonPostExecuteAsyncTaskの呼び出しadapter.notifyDataSetChanged()あなたはdoInBackgroundfeedListにアイテムを追加するので。

編集:

SingleItemModel item = new SingleItemModel(); 

変更この

SingleItemModel item = new SingleItemModel(i); 

モデルクラス内のparamとして私を取るコンストラクタがありません。

+0

私はSingleItemModelアイテムでエラーが発生しました。item = new SingleItemModel(i); – SamR

+0

それからiを削除します。あなたはモデルクラスのコンストラクタをチェックする必要があります – Raghunandan

+0

もう一度私の質問を確認してください – SamR

0

あなたのコードは正しいですが、feedsListが空のときにアダプタを初期化したため、何も表示されません。何をする必要がonPostExecute()メソッドをオーバライドし、(暗黙的にdoInBackground後に実行)onPostExecute方法に

adapter = new MyRecyclerViewAdapter(MainActivity.this, feedsList); 
mRecyclerView.setAdapter(adapter); 

次の2行を移動しています。そうすることで、アダプタや別の方法でフィードを渡す前にfeedsListに項目を追加していたでしょう

これが役に立ちます。

+0

logcatエラーはRecyclerViewです。レイアウト – SamR

+0

をスキップすると、recyclerViewのアイテムが表示されているか、単にエラーが表示されます。 – DarkShadow

+0

何も表示しませんが、restApiによるSQL Serverのデータを取得します。 – SamR