小编nha*_*man的帖子

Square Dagger IllegalStateException:无法加载类MyApplicationModule的模块适配器

我在我的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)

android dependency-injection dagger

15
推荐指数
2
解决办法
7485
查看次数

onGetViewFactory只为多个小部件调用一次

我有一个使用的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方法只被调用一次.这导致所有小部件显示相同的数据.

我怎样才能解决这个问题?

android android-appwidget

13
推荐指数
1
解决办法
3189
查看次数

写入Android中的内部私有存储

我试图在我的应用程序中保存内部私有存储区域(应用程序用户首选项)上的简单文本文件中的一些数据.我在这里阅读了很多问题(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的所有更新后,结果仍然相同.我仍然在解决这个问题,并且很快就会尝试回到这里(希望下次不到一年).

android file-permissions

12
推荐指数
2
解决办法
8万
查看次数

Android多个SurfaceViews

我试图在一个屏幕上使用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)

android surfaceview ondraw

12
推荐指数
2
解决办法
2万
查看次数

在方向更改后更改选项卡后,选项卡内容保持可见

我使用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)

tabs android actionbarsherlock

12
推荐指数
3
解决办法
5012
查看次数

LayoutTransition:展开视图旁边的Animate View

我已经将我的问题重新创建为一个非常简单的表示.我有3个TextViews.其中2 LinearLayout个是单独的,第三个是与...相同的水平LinearLayout.我切换的知名度test1test2,我想看看他们消失(工作).此外,我想test3滑入他的新地方(取代test1test2).我无法做到这一点.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)

android android-animation

12
推荐指数
2
解决办法
2万
查看次数

在单个活动中切换片段

我想创建一个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)

MainMenuFragmentOnClickListener:

@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)

android android-fragments android-activity

11
推荐指数
2
解决办法
3万
查看次数

在L预览上使用材质主题

L Developer Preview目前处于API级别20.但是,显然主题需要API级别21.

@android:style/Theme.Material.Light.DarkActionBar 需要API级别21

这是一个错误,我做错了什么,或者只是不可能在L预览中使用Material?

android android-5.0-lollipop material-theme

11
推荐指数
1
解决办法
6017
查看次数

Android WebView不加载URL?

我有一个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)

java android android-webview

11
推荐指数
2
解决办法
2万
查看次数

ProgressDialog和AlertDialog导致泄露的窗口

如果是第一次启动,我有一个显示欢迎消息的活动:

@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)

这一切都很漂亮,但是当我启动应用程序并立即旋转屏幕时,我得到了众所周知的泄露窗口异常.

我该如何防止这种情况?是否有更好的方式来显示对话框?当我ProgressDialogAsyncTasks中使用s 时也会发生这种情况Fragment.

android

10
推荐指数
1
解决办法
5140
查看次数