我想创建可扩展的GridView,其行为类似于Google图像页面.我想知道如何实现这样的功能:当我点击其中一个图像时,页面会展开并显示图片的详细信息.是否有可能在Android中做类似的事情?
图像网格:

扩展图像网格:

如何同步执行RoboSpice请求?可能吗?我想在IntentService中使用RoboSpice.
编辑:
有时需要同步执行某些操作,例如在服务中.在我最近的项目中,我必须排队一些不同类型的请求,我想将IntentService与RoboSpice一起使用.在我的情况下,当我执行不同的请求时,我需要等待结果request1然后从中传递数据request2并执行它.
我想要一些批量请求队列.假设我们有两种类型的请求:request1和request2.request2需要获取的数据request1:
request1 request1并传递给request2 request2我想使用IntentService(队列)但由于异步而在启动请求后死亡.
在我看来,使用听众或CountDownLatch并不是最好的方法.
我正在使用Retrofit来实现Rest Client,在尝试将响应体转换为模型Object时遇到了一些麻烦.
我的界面中有以下内容:
@POST("/users")
void createUser(@Body RegisterUserToken token, Callback<User> callback);
Run Code Online (Sandbox Code Playgroud)
我的User课基本上是一个POJO:
public class User {
private int id;
private String username;
private String email;
private String language;
// getters and setters...
}
Run Code Online (Sandbox Code Playgroud)
这就是我使用Rest Client的方式:
restClient.createUser(token, new Callback<User>() {
@Override
public void success(User user, Response response) {
// ...problem is here, with the user object
}
@Override
public void failure(RetrofitError error) {
// ...
}
});
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是响应主体没有被转换为User对象.我很确定问题是服务器正在返回:
{"user":{"id":13,"username":"john","email":"john@gmail.com","language":"eng"}}
Run Code Online (Sandbox Code Playgroud)
而不仅仅是:
{"id":13,"username":"john","email":"john@gmail.com","language":"eng"}
Run Code Online (Sandbox Code Playgroud)
鉴于我无法真正修改服务器代码,我如何自定义Retrofit/GSON以正确地将此响应主体转换为我的User对象?
我正在使用Retrofit从REST API获取书签:
public interface BookmarkService {
@GET("/bookmarks")
Observable<List<Bookmark>> bookmarks();
}
Run Code Online (Sandbox Code Playgroud)
现在我想延迟发出此列表中的每个项目.
我做了类似的东西这在Java中,但onCompleted永远不会触发.
private Observable<Bookmark> getBookmarks() {
return getBookmarkService().bookmarks()
.flatMap(new Func1<List<Bookmark>, Observable<Bookmark>>() {
@Override
public Observable<Bookmark> call(List<Bookmark> bookmarks) {
Observable<Bookmark> resultObservable = Observable.never();
for (int i = 0; i < bookmarks.size(); i++) {
List<Bookmark> chunk = bookmarks.subList(i, (i + 1));
resultObservable = resultObservable.mergeWith(Observable.from(chunk).delay(1000 * i, TimeUnit.MILLISECONDS));
}
return resultObservable;
}
})
.observeOn(AndroidSchedulers.mainThread());
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
用法:
mSwipeRefreshLayout.setRefreshing(true);
getBookmarks()
.subscribe(new Observer<Bookmark>() {
@Override
public void onCompleted() {
Timber.i("Completed");
mSwipeRefreshLayout.setRefreshing(false); …Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,我想在特定的时间间隔闪烁闪光灯.
以下是我遵循的步骤.
1)将Timer设置为特定的间隔.
2)在run()方法中我做了TurnOn和TurnOff闪存的代码.
但闪光灯闪烁的间隔在不同的设备上是不同的.所有设备的计时器时间都相同,我也在其间放置了一个Log,我得到的值相同,但问题仍然存在.
这是硬件问题,因为不同设备的硬件不同.我也测试了iPhone 5s(通过在iOS中转换相同的代码),但闪烁闪烁比Android快得多.
对于Android,我已经在Nexus 4,Motorola G2,Sony Xperia Neo上进行了测试,它运行良好.
问题在于Nexus 5和三星Galaxy S4.
编辑
定时器代码:
long delayLong = 200;
long timerValueLong = 500;
Timer timer;
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
if (!mLightOn) {
turnOnFlash();
} else {
turnOffFlash();
}
}
}, delayLong, timerValueLong);
Run Code Online (Sandbox Code Playgroud) 当我同步gradle时,我有这个错误:
错误:未找到工件'com.viewpagerindicator:library:2.4.1:library.aar'.
我的朋友是:
apply plugin: 'com.android.application'
repositories {
maven { url "http://dl.bintray.com/populov/maven" }
mavenCentral()
}
android {
compileSdkVersion 20
buildToolsVersion "20.0.0"
defaultConfig {
minSdkVersion 14
targetSdkVersion 19
}
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:19.1.+'
compile 'com.mcxiaoke.volley:library:1.0.6@aar'
compile 'com.squareup.picasso:picasso:2.2.+'
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.daimajia.slider:library:1.1.2@aar'
compile 'com.viewpagerindicator:library:2.4.1@aar'
compile files('libs/jsoup-1.8.1.jar')
}
Run Code Online (Sandbox Code Playgroud)
我需要做什么?!
在我的应用程序中,我正在尝试保存位图,MediaStore.Images.Media.insertImage我尝试使用此方法自定义选择创建的文件名,但在将任何文件名作为String传递后,此方法创建随机文件名,我无法更改它,例如在这段代码中,我想创建"123456"并保存它
String path = Environment.getExternalStorageDirectory().toString();
OutputStream fOut = null;
bitmapFileName = "123456";
File file = new File(path, bitmapFileName + ".jpg");
fOut = new FileOutputStream(file);
fOut.flush();
fOut.close();
drawView.getDrawingCache().compress(Bitmap.CompressFormat.JPEG, 85, fOut);
String imgSaved = null;
imgSaved = MediaStore.Images.Media.insertImage(getContentResolver(), file.getAbsolutePath(), file.getName(), file.getName());
Run Code Online (Sandbox Code Playgroud)
保存图像后,此方法创建文件名,14524645878.jpg而不是123456.jpg什么问题?或者如何找到并获得由这个方法创建的女巫文件名
我想检查用户是否在主FragmentActivity中登录,但是用户已登录
AccessToken.getCurrentAccessToken()
返回null.我在下面的代码中做错了什么?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
FacebookSdk.sdkInitialize(context);
callbackManager = CallbackManager.Factory.create();
AccessToken accessToken = AccessToken.getCurrentAccessToken();
if (accessToken != null) {
if (!accessToken.isExpired()) {
}
}
}
Run Code Online (Sandbox Code Playgroud) android facebook facebook-android-sdk facebook-login facebook-access-token
我使用片段替换FrameLayout fragmentTransaction.replace().
布局:
<FrameLayout
android:id="@+id/articlesAppender"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
替换Activity的onCreate:
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
articlesFragment = (ArticlesFragment) fragmentManager.findFragmentByTag(ARTICLES_FRAGMENT_TAG);
if (articlesFragment == null) {
articlesFragment = new ArticlesFragment();
}
fragmentTransaction.replace(R.id.articlesAppender, articlesFragment, ARTICLES_FRAGMENT_TAG);
fragmentTransaction.commit();
Run Code Online (Sandbox Code Playgroud)
ArticleFragment的onCreate:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.articles_fragment, container, false);
view.setVisibility(View.GONE);
return view;
}
Run Code Online (Sandbox Code Playgroud)
但是view.setVisibility(View.GONE);不支持库25.1.0.因此片段仍将显示在屏幕上.如果我设置了articlesAppenderto 的可见性GONE.所以看起来应该是这样的:
<FrameLayout
android:id="@+id/articlesAppender"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone">
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
然后片段在屏幕上将不可见,但是当我稍后尝试呼叫时view.setVisibility(View.VISIBLE);,它仍然不起作用.片段仍然不可见.
这意味着view返回的inflater.inflate(R.layout.articles_fragment, container, false);不是片段的真实视图.但它在支持库25.0.1上完美运行. …
我在我的项目中使用Volley库但是我遇到了OutOfMemory异常的问题.在我的应用程序中,我通过NetworkImageView使用setImageUrl方法从服务器下载拇指和全尺寸图像.我正在使用BitmapLruCache:
public class BitmapLruCache extends LruCache<String, Bitmap> implements ImageLoader.ImageCache {
public static int getDefaultLruCacheSize() {
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
final int cacheSize = maxMemory / 8;
return cacheSize;
}
public BitmapLruCache() {
this(getDefaultLruCacheSize());
}
public BitmapLruCache(int sizeInKiloBytes) {
super(sizeInKiloBytes);
}
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight() / 1024;
}
@Override
public Bitmap getBitmap(String url) {
return get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
put(url, bitmap); …Run Code Online (Sandbox Code Playgroud)