我在我的Android项目中使用eclipse和Dagger 1.2.2.我设法用Dagger实现了一个测试应用程序.但是通过我的"真实"应用程序,我得到:
java.lang.RuntimeException:无法创建应用程序app.MyApplication:java.lang.IllegalStateException:无法加载类app.MyApplicationModule的模块适配器.请确保为此模块运行代码生成.:
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to create application app.MyApplication: java.lang.IllegalStateException: Module adapter for class app.MyApplicationModule could not be loaded. Please ensure that code generation was run for this module.
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4687)
at android.app.ActivityThread.access$1400(ActivityThread.java:159)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1376)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5419)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: Module adapter for class app.MyApplicationModule could not be loaded. Please ensure that code generation was run for this module.
at …Run Code Online (Sandbox Code Playgroud) 我有一个使用的appwidget ListView.我创建了一个扩展的类RemoteViewsService:
public class AppWidgetService extends RemoteViewsService {
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return (new AppWidgetListFactory(this.getApplicationContext(), intent));
}
}
Run Code Online (Sandbox Code Playgroud)
在我的AppWidgetProvider,我为每个小部件实例(每个appWidgetId)调用以下方法:
private static void fillInList(RemoteViews widget, Context context, int appWidgetId) {
Intent intent = new Intent(context, AppWidgetService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
widget.setRemoteAdapter(R.id.appwidget_listview, intent);
}
Run Code Online (Sandbox Code Playgroud)
的构造函数 AppWidgetListFactory
public AppWidgetListFactory(Context context, Intent intent) {
this.context = context;
appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
System.out.println("New TVAPWLF for: " + appWidgetId);
trains = WidgetData.getInstance().widgetMap.get(appWidgetId);
}
Run Code Online (Sandbox Code Playgroud)
现在问题是,该fillInList方法被调用的方式与小部件的实例一样频繁,但该onGetViewFactory方法只被调用一次.这导致所有小部件显示相同的数据.
我怎样才能解决这个问题?
我试图在我的应用程序中保存内部私有存储区域(应用程序用户首选项)上的简单文本文件中的一些数据.我在这里阅读了很多问题(StackOverflow)并尝试了建议的解决方案但没有成功.看来,最简单的解决方案是这里建议的解决方案:
http ://developer.android.com/guide/topics/data/data-storage.html#filesInternal
但我无法在我的测试设备上使用它.我还尝试使用java.io.File中提供的方法和适当的方法创建该文件.我也尝试在SDCard上创建具有相同结果的文件,失败.我已经尝试了其他答案中列出的许多解决方案,遵循完全建议的代码和说明并找到相同的结果.我开始觉得我错过了一些重要的代码或某个设置标志,我在清单文件中设置了权限:
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
为了清楚起见,我正在尝试写入设备的内部私有存储.它是一个包含姓名,电话号码和几个类型int标志的小文件.无论我使用什么方法,我发现文件没有创建(或者如果我手动将文件放在SDCard上,则更改),或者当我尝试引用文件或文件位置时,我得到NullPointerException:
private File fILE = new File("Mydata", main.FILENAME);
Run Code Online (Sandbox Code Playgroud)
要么
private File fILE = getDir("Mydata", 0);
Run Code Online (Sandbox Code Playgroud)
我在HTC Hero上运行代码,更新了Sprint的最新服务版本.任何帮助将非常感谢,提前致谢!
史蒂夫
更新(2/2/11):使用EVO(API 8)我仍然得到NullPointerException.产生异常的代码如下,有关我的应用无法访问内部存储的原因的任何想法?我在使用两个API级别(API 7和8)的三个不同物理设备上遇到此问题.
File newfile = new File(this.getFilesDir() + "/data/files/", "sample.txt");
Run Code Online (Sandbox Code Playgroud)
更新2:2/4/11 - 我发现在任何情况下我都无法在物理设备(数据目录)上看到文件结构.有没有人对此有任何想法?设备已正确配置,可以从eclipse或adb运行应用程序.
更新3:(2/9/11) - 我想我可能已经找到了问题所在,但我不确定如何处理它.我已经发现物理设备上/ data /目录的权限是:drwxrwx--x.我不知道为什么会这样,也许与Sprint有关?我已经在Sprint的HTC Hero,三星Epic(Galaxy S)和HTC EVO上找到了这种方式.问题似乎是DDMS和我的应用程序没有r/w访问该目录.我需要弄清楚这里有两件事,为什么会这样,以及如何在野外解决这个问题.再次,这里的任何帮助将是真棒!
更新4:我认为去年2月对我来说是一个完美的金发时刻(见更新3).我拥有的测试设备没有ROOT,因此没有访问权限(DUH!).经过SGS和EVO 4G的所有更新后,结果仍然相同.我仍然在解决这个问题,并且很快就会尝试回到这里(希望下次不到一年).
我试图在一个屏幕上使用3个SurfaceViews,一个在上半部分(BoardView),一个在下半部分(StatusView),最后一个作为上半部分之上的额外层(TileView)(参见main.xml) .
我创建了一个MySurfaceView类,它由BoardView,StatusView和TileView扩展.
我有很多问题.
我先给出代码.
main.xml中:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/main_background">
<com.niek.test.BoardView
android:id="@+id/boardview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/boardview">
<com.niek.test.StatusView
android:id="@+id/statusview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#F0931E"
android:layout_below="@+id/boardview" />
<com.niek.test.TileView
android:id="@+id/tileview"
android:layout_width="180dip"
android:layout_height="60dip"
android:layout_gravity="bottom"/>
</FrameLayout>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
MainActivity.java:
package com.niek.test;
public class MainActivity extends Activity {
private Board board;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
board = new Board();
BoardView boardView = (BoardView) findViewById(R.id.boardview);
boardView.setBoard(board);
StatusView statusView = (StatusView) findViewById(R.id.statusview);
statusView.setBoard(board);
}
}
Run Code Online (Sandbox Code Playgroud)
MySurfaceView.java
package com.niek.test;
public class …Run Code Online (Sandbox Code Playgroud) 我使用ActionBarSherlock来实现的ActionBar,在我的应用程序选项卡.当我启动应用程序,并从选项卡切换到选项卡时,一切都很好.但是,当我从纵向模式更改为横向模式时,上次激活的选项卡的内容将保持可见.更改为另一个选项卡会导致在旧内容之上绘制新内容(请参见图像).

我的主要课程:
public class TreinVerkeer extends SherlockFragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupTabs(savedInstanceState);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
private void setupTabs(Bundle savedInstanceState) {
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
Tab tab = actionBar.newTab().setText("STATIONS").setTabListener(new TabListener<StationsFragment>(this, "stations", StationsFragment.class));
actionBar.addTab(tab);
tab = actionBar.newTab().setText("ROUTE").setTabListener(new TabListener<RouteFragment>(this, "route", RouteFragment.class));
actionBar.addTab(tab);
tab = actionBar.newTab().setText("DELAYS").setTabListener(new TabListener<DelaysFragment>(this, "delays", DelaysFragment.class));
actionBar.addTab(tab);
if (savedInstanceState != null) {
actionBar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
}
}
@Override
protected void …Run Code Online (Sandbox Code Playgroud) 我已经将我的问题重新创建为一个非常简单的表示.我有3个TextViews.其中2 LinearLayout个是单独的,第三个是与...相同的水平LinearLayout.我切换的知名度test1和test2,我想看看他们消失(工作).此外,我想test3滑入他的新地方(取代test1和test2).我无法做到这一点.test3只是抓住它的新观点.
我怎么能得到这个?
我的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
android:orientation="vertical" >
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click" />
<LinearLayout android:animateLayoutChanges="true"
android:id="@+id/child1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/test1"
android:layout_width="match_parent" android:visibility="gone"
android:layout_height="wrap_content"
android:text="TEST1" />
<TextView
android:id="@+id/test2"
android:layout_width="match_parent" android:visibility="gone"
android:layout_height="wrap_content"
android:text="TEST2" />
</LinearLayout>
<TextView
android:id="@+id/test3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TEST3" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
在我的活动中:
public class LayoutAnimations extends Activity {
private boolean toggle = true;
/** Called when …Run Code Online (Sandbox Code Playgroud) 我想创建一个Activity显示用户可以通过的菜单.通过单击项目,将显示一个新屏幕,允许用户提供更多选项(类似向导).
我想用Fragments 来实现它,但它对我不起作用.
现在我有:
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/main_fragmentcontainer" >
<fragment
android:id="@+id/mainmenufragment"
android:name="com.myapp.MainMenuFragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<fragment
android:id="@+id/secondmenufragment"
android:name="com.myapp.SecondMenuFragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
MainMenuFragment用OnClickListener:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.mainmenu, container, false);
setupButton(view);
return view;
}
/* Button setup code omitted */
@Override
public void onClick(View v) {
SherlockFragment secondRunMenuFragment = (SherlockFragment) getSherlockActivity().getSupportFragmentManager().findFragmentById(R.id.secondmenufragment);
FragmentTransaction transaction = getSherlockActivity().getSupportFragmentManager().beginTransaction();
transaction.replace(android.R.id.content, secondMenuFragment); …Run Code Online (Sandbox Code Playgroud) L Developer Preview目前处于API级别20.但是,显然主题需要API级别21.
@android:style/Theme.Material.Light.DarkActionBar需要API级别21
这是一个错误,我做错了什么,或者只是不可能在L预览中使用Material?
我有一个Android WebView,它应该加载以下URL:
https://buchung.salonmeister.de/ort/301655/menue/#offerId=907601&venueId=301655
https://buchung.salonmeister.de/place/#offer-details-page?id=907599&venueId=301655
Run Code Online (Sandbox Code Playgroud)
这是我做的:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_orange_light"
tools:context=".MainActivityFragment">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_margin="5dp"
android:layout_above="@+id/progressBar"></WebView>
<ProgressBar
android:id="@id/progressBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:visibility="invisible"
style="?android:attr/progressBarStyleHorizontal"/>
<TextView
android:id="@+id/titleView"
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
在onCreateView():
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_main, container, false);
String url = // some url
final ProgressBar progressBar = (ProgressBar)v.findViewById(R.id.progressBar);
progressBar.setMax(100);
final TextView titleView = (TextView)v.findViewById(R.id.titleView);
mWebView = (WebView)v.findViewById(R.id.webView);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setAllowFileAccess(true);
mWebView.getSettings().setAllowContentAccess(true);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public …Run Code Online (Sandbox Code Playgroud) 如果是第一次启动,我有一个显示欢迎消息的活动:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
showWelcomeMessageIfNecessary();
}
private void showWelcomeMessageIfNecessary() {
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
final Editor edit = prefs.edit();
if (!prefs.getBoolean("welcomemessage", false)) {
edit.putBoolean("welcomemessage", true);
edit.commit();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(R.string.messages_welcome_content).setCancelable(false).setPositiveButton(R.string.errors_ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Do nothing
}
}).setTitle(R.string.messages_welcome_title);
AlertDialog alert = builder.create();
alert.show();
}
}
Run Code Online (Sandbox Code Playgroud)
这一切都很漂亮,但是当我启动应用程序并立即旋转屏幕时,我得到了众所周知的泄露窗口异常.
我该如何防止这种情况?是否有更好的方式来显示对话框?当我ProgressDialog在AsyncTasks中使用s 时也会发生这种情况Fragment.