我想要生成以下代码:
// retrieve json data from server and display the data on a card with two lines
private void DisplayClassData(int count, final ArrayList<TwoLineSummaryCardDataObject> tlscdo,
final TwoLineSummaryViewAdapter tlsva) {
final String url = "https://jsaonurl.com/jsondata";
// want to generify this so that I can pass any class. But not just *any* class. Just some of my
// classes that I have set up.
final GsonRequest gsonRequest = new GsonRequest(url, Myclass1.class, null, new Response.Listener<Myclass1>() {
@Override
public void onResponse(Myclass1 myclass1) { // again, this refers back to the line above
tlscdo.clear();
Realm realm = Realm.getInstance(act);
realm.beginTransaction();
// all of my classes will have a getElement() method which will return a list
// of objects. Perhaps I need to make a prototype and use implements???
for (int i = 0; i < myclass1.getElement().size(); i++) {
tlscdo.add(new TwoLineSummaryCardDataObject(myclass1.getElement().get(i)));
realm.copyToRealmOrUpdate(myclass1.getElement().get(i));
}
realm.commitTransaction();
tlsva.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
if(volleyError != null) Log.e("MainActivity", volleyError.getMessage());
Toast.makeText(MainActivity.this, "Error in Volley", Toast.LENGTH_SHORT).show();
}
}
);
// Add the request to the queue
Volley.newRequestQueue(this).add(gsonRequest);
VolleyHelper.getInstance(getApplicationContext()).addToRequestQueue(gsonRequest);
}
在我的数据结构中,我有七个类都设置相同。如何设置它以便我可以重用代码并将任何类传递给它?
答案 0 :(得分:0)
我认为您可能希望创建一个可以调用myFactory.getAllElements(Class<? extends MyBaseClass> clazz)
的工厂类 - 假设您有MyBaseClass
MyClass1
等扩展。
答案 1 :(得分:0)
您可以实施自定义请求。扩展Request<T>
类,其中<T>
表示已解析响应的类型。
在parseNetworkResponse
方法中,您可以实例化七个类中的一个。 T应该是你所有七个班级的父班。
答案 2 :(得分:0)
如果你想传递一个课程,那么,传递一个Class
。 Java Class<T>
对象,即。
您需要使用超类或视图适配器的接口,并按如下方式更改方法签名:
private <T> void DisplayClassData(
int count
, final ArrayList<T> data
, final BaseViewAdapter va
, Class<T> itemClass
)
使用itemClass
创建类的新实例。使用基本视图适配器根据需要发送通知。使用itemClass
代替Myclass1.class
。
然后呼叫者将致电
DisplayClassData(tlsCount, tlscdo, tlsva, TwoLineSummaryCardDataObject.class);
DisplayClassData(esCount, escdo, esva, ExpandedSummaryCardDataObject.class);
... // And so on