我需要一些调试我的应用程序的帮助.首先:在模拟器和其他设备上,我的应用运行正常.在我的设备上,我关闭了一个力(没有强制关闭消息).
如果应用程序的活动发生更改,则会发生"崩溃".
这是MainActivity该类的一些代码.它只是通过webview从网页上读取html内容.不,这是不可能的,HttpRequest因为我无法模拟发布请求.
public class MainActivity extends Activity {
public final static String EXTRA_HTML = "com.example.com.test.HTML";
private WebView mWebView;
private ProgressDialog mDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.webView1);
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();
mWebView.setBackgroundColor(0);
mWebView.setWebChromeClient(new WebChromeClient() {
public boolean onConsoleMessage(ConsoleMessage cmsg) {
if (cmsg.message().startsWith("MAGIC")) {
mDialog.cancel();
/*HashMap<String, String> message = new HashMap<String, String>();*/
String msg = cmsg.message().substring(5);
Intent intent = new Intent(MainActivity.this,
ReadDataActivity.class);
/*message.put("message", msg);*/
/*intent.putExtra(EXTRA_HTML, message);*/
intent.putExtra(EXTRA_HTML, msg); …Run Code Online (Sandbox Code Playgroud) 背景:
我正在实现一个应用程序,它可以从Web服务中读取有关电影的信息.该Web服务返回有关每部电影的几个信息(标题,日期,海报网址,导演,演员等).
该Web服务支持分页,因此电影以100个一包的形式加载.
执行:
这个想法是显示一个包含所有海报的网格.当用户向下滚动时自动请求更多项目.
单击某个项目时,用户将导航到包含所选影片详细信息视图的库,允许使用ViewPager滚动详细信息.
因此,我们的想法是将网格中检索到的电影集合传递给"DetailedGalleryActivity".
更新:当用户离开片段以处理片段生命周期时,还需要保存状态.您可以测试它启用Developer选项:不要保留活动
问题
我的第一种方法是在json中序列化电影集合,并将其作为String Extra传递给Activity.
但由于电影列表很大,如果用户在网格中滚动很多,则json的大小对于Bundle来说非常大(请参阅字符串数据的最大大小),从而获得运行时异常.
我已经检查了一些答案,这些答案谈到在启动详细信息活动之前将数据保存在SharedPreferences或其他持久存储中,然后从详细信息中访问它.我发现这个解决方案很奇怪,因为它忽略了使用自定义和手工制作的解决方案在活动之间传递数据的机制.
解决这个问题的最佳方法是什么?
我试图通过Intent.putExtras这样的方式将数据从一个活动传递到另一个活动:
private ArrayList<HashMap<String, String>> mGroups = new ArrayList<HashMap<String, String>>();
private ArrayList<HashMap<String, String>> mUsers = new ArrayList<HashMap<String, String>>();
...
Bundle data = new Bundle();
data.putInt("mode", mode);
data.putSerializable("groups", (Serializable) mGroups);
data.putSerializable("users", (Serializable) mUsers);
data.putInt("current_class", mCurrentClassId);
data.putInt("current_user", mCurrentUserId);
Intent intent = new Intent(ctx, ChildActivity.class);
intent.putExtras(data);
ctx.startActivityForResult(intent, 0);
Run Code Online (Sandbox Code Playgroud)
这mUsers是一个HashMap<String,String>包含用户数据的列表,包括Base64编码的照片,此列表中的字符串大小总和约为500Kb
startActivityForResult用黑屏调用挂起几分钟然后我得到ANR错误.onCreate根本没有调用子活动.
如果我不在mUsers中添加大字符串(没有Base64编码的照片) - 工作得很好.
请帮忙.
我刚开始一份新工作,正在开发一个需要在应用程序周围传递大量数据的应用程序.目前,该应用程序使用持久存储,并且不断查询SQL数据库以向用户提取和显示这些大型数据集.由于所有这些昂贵的操作,应用程序几乎无法使用(太多的加载旋转器用于花费太长时间的操作).我的解决方案是在启动主活动时加载数据,然后根据需要将其传递给任何新活动.
我用一个数据集实现了这个变化的第一阶段.但是,当我尝试使用intent的extras包中的所有这些数据传递ArrayList时,我收到以下错误:
04-27 06:42:32.022: E/AndroidRuntime(14180): FATAL EXCEPTION: main
04-27 06:42:32.022: E/AndroidRuntime(14180): Process: com.myprocess, PID: 14180
04-27 06:42:32.022: E/AndroidRuntime(14180): java.lang.SecurityException: Unable to find app for caller android.app.ApplicationThreadProxy@42b32678 (pid=14180) when publishing content providers
04-27 06:42:32.022: E/AndroidRuntime(14180): at android.os.Parcel.readException(Parcel.java:1472)
04-27 06:42:32.022: E/AndroidRuntime(14180): at android.os.Parcel.readException(Parcel.java:1426)
04-27 06:42:32.022: E/AndroidRuntime(14180): at android.app.ActivityManagerProxy.publishContentProviders(ActivityManagerNative.java:2977)
04-27 06:42:32.022: E/AndroidRuntime(14180): at android.app.ActivityThread.installContentProviders(ActivityThread.java:4591)
04-27 06:42:32.022: E/AndroidRuntime(14180): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4522)
04-27 06:42:32.022: E/AndroidRuntime(14180): at android.app.ActivityThread.access$1500(ActivityThread.java:151)
04-27 06:42:32.022: E/AndroidRuntime(14180): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1381)
04-27 06:42:32.022: E/AndroidRuntime(14180): at android.os.Handler.dispatchMessage(Handler.java:110)
04-27 06:42:32.022: E/AndroidRuntime(14180): at android.os.Looper.loop(Looper.java:193)
04-27 06:42:32.022: E/AndroidRuntime(14180): at …Run Code Online (Sandbox Code Playgroud) database performance android android-intent android-activity