目前的Android Google Maps API要求您先mapFragment.getMapAsync使用a 调用OnMapReadyCallback才能访问GoogleMap.我假设一旦你有了GoogleMap它就可以安全地打电话,moveCamera()但我看到崩溃报告,IllegalStateException其中说Map size can't be 0. Most likely, layout has not yet occured for the map view.
所以我尝试添加一个ViewTreeObserver.OnPreDrawListener,并将moveCamera()调用移动到该onPreDraw方法,因为该文档说"在这一点上,树中的所有视图都已经过测量并给出了一个框架".但我仍然看到一些同样问题的崩溃报告.我找不到任何相关的文档 - 像CameraUpdateFactory.newLatLngBounds崩溃的诸如moveCamera之类的问题但它们在getMapAsyncAPI 之前已经过时,所以它们没有多大帮助.
我看到StrictMode失败了,我看不出我正在做什么有什么问题.失败的是:
java.lang.Throwable: Explicit termination method 'end' not called
E/StrictMode(26875): at dalvik.system.CloseGuard.open(CloseGuard.java:184)
E/StrictMode(26875): at java.util.zip.Inflater.<init>(Inflater.java:82)
E/StrictMode(26875): at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:96)
E/StrictMode(26875): at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:81)
E/StrictMode(26875): at libcore.net.http.HttpEngine.initContentStream(HttpEngine.java:528)
E/StrictMode(26875): at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:836)
E/StrictMode(26875): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:274)
E/StrictMode(26875): at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:486)
E/StrictMode(26875): at com.mycompany.MyClass.sendJson(MyClass.java:267)
Run Code Online (Sandbox Code Playgroud)
我配置StrictMode:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog()
.penaltyDeath().build());
}
Run Code Online (Sandbox Code Playgroud)
代码如下所示:
HttpURLConnection connection = null;
OutputStream outputStream = null;
InputStream in = null;
try {
connection = (HttpURLConnection)new URL("http://our.server/some/path").openConnection();
connection.setRequestProperty("Accept", "application/json");
connection
.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
connection.setDoOutput(true);
outputStream = connection.getOutputStream();
String content = "{\"some\":\"json data\"}"; …Run Code Online (Sandbox Code Playgroud) 我们在ActionBar上有一个SearchView,它被设置为非图标化.由于我们在视图中没有任何内容直到用户输入要搜索的内容,因此将SearchView初始焦点放在一边是有意义的,并确保软键盘显示为用户输入文本做好准备 - 否则他们'我总是必须先在SearchView中点击.
我可以通过调用来给予SearchView焦点
searchView.requestFocus();
Run Code Online (Sandbox Code Playgroud)
但我不能让软键盘出现.在我们的另一个片段中,我有一个我们想要聚焦的EditText我可以通过调用让软键盘出现在那里
InputMethodManager mgr = (InputMethodManager)getActivity().getSystemService(
Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
Run Code Online (Sandbox Code Playgroud)
但这只是在SearchView上不起作用.必须有可能让它发挥作用.
我们有一个包含SlidingMenu(https://github.com/jfeinstein10/SlidingMenu)的Activity,其中有三个选项,我们称之为A,B1,C1.这些对应于我们在活动中显示的片段.当您从SlidingMenu中选择其他选项时,我通过FragmentManager将新片段替换为新片段.
从片段B1你可以去另外两个,让我们称他们为B2和B3.在这里,我们希望Back键从B2 - > B1或B3 - > B1,所以我调用transaction.addToBackStack(null).如果我们在B2或B3上从SlidingMenu中选择一个选项,我们想要清除后面的堆栈,所以我使用这个问题中建议的代码使用调用popBackStack()的片段清除堆栈直到它清楚.
到现在为止还挺好.
从Fragment C1你可以去Fragment C2.由于C1/C2更像是我使用的主/细节设计
fragmentTransaction.setCustomAnimations(R.animator.slide_in_from_right,
R.animator.slide_out_to_left, R.animator.slide_in_from_left,
R.animator.slide_out_to_right);
Run Code Online (Sandbox Code Playgroud)
添加幻灯片动画,当C2从右侧滑入时,C1向左滑动,反之亦然.在C2上按回车键将我们带回C1,带有反向动画,一切都很好.
但
如果你从SlidingMenu中选择A或B1,我们popBackStack()从后面的堆栈中删除C1,那么它会向右滑动C2,这看起来很奇怪.我想要做的是清除后台堆栈而不运行动画,但我找不到办法做到这一点.我试过调用popBackStackImmediate(),但这似乎没有任何区别.
作为替代方案,我想我可以完全避免调用addToBackStack,而是通过Activity.onBackPressed()手动处理用户按Back键,但也许有一个我看不到的解决方案?
我们在Android应用中使用ORMLite.它工作正常,除非我们尝试在打开proguard的情况下进行构建.
我已经阅读了各种类似的帖子,到目前为止我已经进入了我的proguard-project.txt
-keep class com.j256.** {
*;
}
Run Code Online (Sandbox Code Playgroud)
如以下讨论中所述http://sourceforge.net/p/proguard/discussion/182456/thread/6765bb69
而且我有
-keepclassmembers class * {
public <init>(android.content.Context);
public <init>(android.app.Activity,int);
}
Run Code Online (Sandbox Code Playgroud)
正如另一个在Android上使用OrmLite的 stackoverflow问题Proguard所建议的那样
但它仍然无法正常工作.如果我添加,我可以让它运行
-dontobfuscate
Run Code Online (Sandbox Code Playgroud)
但这有点遗漏了首先使用proguard的观点.
当我跑步时,我得到一个
IllegalStateException: Could not find OpenHelperClass because none of the generic
parameters of class class <our.package.name>.LaunchActivity extends
OrmLiteSqliteOpenHelper. You should use getHelper(Context, Class) instead.
Run Code Online (Sandbox Code Playgroud)
哪里
public class LaunchActivity extends OrmLiteBaseActivity<DatabaseHelper>
Run Code Online (Sandbox Code Playgroud)
和
public class DatabaseHelper extends OrmLiteSqliteOpenHelper
Run Code Online (Sandbox Code Playgroud)
我已经添加
-keep public class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
-keep public class <our.package.name>.LaunchActivity
Run Code Online (Sandbox Code Playgroud)
但仍然没有运气.这个问题似乎之前已被问过(OrmLite和proguard混淆的问题),但我希望 …
在Retrofit 1.9.x中,有一个RetrofitError.Kind.NETWORK可以让您轻松确定故障是否是由网络错误引起的.在新的2.0 API我们不再RetrofitError有一个简单的等价物我们可以用来测试是否Response由于网络失败?