我用Google搜索了这个,但找不到答案,所以这里......
我有一个ListView,显示一些文本和图像.底层适配器出于性能原因(根据推荐的方法)回收视图,并且我根据Android开发者网站的位图页面上的建议使用AsynchTask加载图像.
一切都很顺利,但我有一个问题.当适配器中的视图被回收时,它仍然具有对旧图像(ImageView)的引用.如果用户缓慢滚动,则AsynchTask有足够的时间加载新图像并显示它,因此没有可见的新图像重新加载到用户.
但是,如果用户非常快速地滚动,则加载图像的延迟意味着他们在被新图像替换之前看到旧图像(当View被另一个项目使用时加载).
所以,我的问题是,如何检测屏幕上何时不再显示视图,以便我可以删除图像?这将意味着用户看到一个空的列表视图项,最终将加载适当的图像,这看起来会更好.
提前谢谢了.这是列表视图适配器代码.
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View view = convertView;
ListViewHolder viewHolder;
// if this is not a recycled view then create a new view for the data...
if (view == null)
{
view = this.inflater.inflate(R.layout.target_list_view_layout, null, true);
viewHolder = new ListViewHolder();
viewHolder.manufacturer = (TextView) view.findViewById(R.id.manufacturer);
viewHolder.targetName = (TextView) view.findViewById(R.id.targetName);
viewHolder.targetThumbnail = (ImageView) view.findViewById(R.id.targetThumbnail);
view.setTag(viewHolder);
} else
{
viewHolder = (ListViewHolder) convertView.getTag();
}
TargetDescriptor targetDescriptor = this.selectedTargets.get(position);
viewHolder.manufacturer.setText(targetDescriptor.manufacturer); …Run Code Online (Sandbox Code Playgroud) 首先,让我解释一下我要做的事情,因为这是一个两部分问题.
我建立在内部通过的OAuth2一个谷歌帐户验证一个JAX-RS的服务,所以它可以访问和操作谷歌日历.这项服务将通过一个网站(的Joomla),这将允许登录到网站的用户注册与日历事件他们的电子邮件地址,以便他们可以得到电子邮件通知当事件附近被调用.这些用户不了解底层Google帐户.
所以我的第一个问题是使用服务帐户身份验证是正确的吗?查看Google文档,它是唯一适合非人类身份验证的用例(因此服务器到服务器身份验证).
第二个问题是,我已经写了一些代码来做到这一点,但我拿回401 /未经授权的响应返回以下错误回来时,我调用execute方法日历饲料.此代码已从Google示例中取消.
我正在使用Google Calendar API的v3-rev3-1.5.0-beta.我已在帐户中启用了Calendar API,并创建并下载了私钥,该私钥在下面的代码中使用.
我在本地调用Eclipse中的代码,而不是从Web服务器调用.
所以我做的第一个调用是取回一个凭证对象(Id用X混淆):
private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
private static final JsonFactory JSON_FACTORY = new JacksonFactory();
.
.
.
GoogleCredential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId("284XXXXXXXX@developer.gserviceaccount.com")
.setServiceAccountScopes(CalendarScopes.CALENDAR)
.setServiceAccountPrivateKeyFromP12File(new File("D:/3cd8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXd635e-privatekey.p12"))
.build();
Run Code Online (Sandbox Code Playgroud)
下一步是调用Calendar API,就像这样(之间没有其他代码调用):
Calendar calendar = Calendar.builder(HTTP_TRANSPORT, JSON_FACTORY)
.setApplicationName("TestApp-Calendar/1.0").setHttpRequestInitializer(credential)
.build();
CalendarList feed = calendar.calendarList().list().execute();
Run Code Online (Sandbox Code Playgroud)
对list().execute()的调用导致以下错误:
com.google.api.client.googleapis.json.GoogleJsonResponseException:401 Unauthorized {"code":401,"errors":[{"domain":"global","location":"Authorization","locationType":"标题","消息":"需要登录","原因":"必需"}},"消息":"需要登录"} com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException. java:159)com.google.api.client.googleapis.json.GoogleJsonResponseException.execute(GoogleJsonResponseException.java:187)com.google.api.client.googleapis.services.GoogleClient.executeUnparsed(GoogleClient.java:115) at com.google.api.client.http.json.JsonHttpRequest.executeUnparsed(JsonHttpRequest.java:112)at the com.google.api.services.calendar.Calendar $ CalendarList $ List.execute(Calendar.java:510)at uk .org.reigatepriorybowmen.Service.registerEmailForAllCalendarEvents(Service.java:55)at uk.org.reigatepriorybowmen.Service.main(Service.java:74)
服务帐户设置如下:

那么,我做错了什么?!我花了几个小时在谷歌上寻找解决方案,所以这是我最后的希望.
非常感谢您的帮助.
贾斯汀
google-calendar-api oauth-2.0 google-api-java-client google-oauth
首先,我做了一个搜索,找不到我的问题的具体答案,所以这里...
我正在编写我的第一个Android应用程序,并计划拥有Lite版本(有限功能)和付费版本(完整功能).
Lite和Pro版本将使用相同的SQLite数据库结构,如果用户以Lite版本启动并升级到Pro版本,我不希望它们丢失他们在Lite版本中创建的数据.
由于Lite和Pro版本(根据我的理解)必须在单独的包中以允许Android Market区分它们,Pro版本如何看到Lite数据库?
非常感谢你的答案.
这是我的帖子中关于使用Google Calendar API和OAuth2时出现401错误的信息,可以在此处找到
这包含导致我下一个问题的帐户设置的详细信息,因此我不会在此主题中重复自己.
好的,所以当我调用以下代码来更新Calendar事件时,我得到403禁止错误.
for (Event event : events.getItems())
{
event.setSummary("XXX" + event.getSummary());
Event updatedEvent = calendar.events().update(CALENDAR_ID, event.getId(), event).execute();
}
Run Code Online (Sandbox Code Playgroud)
这是返回的错误消息:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code" : 403,
"errors" : [ {
"message" : "Forbidden"
} ],
"message" : "Forbidden"
}
Run Code Online (Sandbox Code Playgroud)
我试过了什么?好吧,我已经重新阅读了关于服务帐户的(相当差的)Google文档,重新检查了我的API控制台帐户设置,尝试更改构建凭据的代码(这会导致其他错误,因此在我之前的帖子中是回归) .
简而言之,没有任何作用,那么我有什么明显的遗漏吗?
android ×2
oauth-2.0 ×2
asynchronous ×1
google-oauth ×1
image ×1
listview ×1
sqlite ×1
upgrade ×1