小编rem*_*dy.的帖子

主持人是否知道MVP模式中的活动/上下文是个坏主意?

我已经玩了几个星期的MVP模式,我已经到了需要上下文来启动service和访问的地步Shared Preferences.

我已经读过MVP的目的是将视图与逻辑分离,并且context在一个内部Presenter可以打败那个目的(如果我错了,请纠正我).

目前,我有一个看起来像这样的LoginActivity:

LoginActivity.java

public class LoginActivity extends Activity implements ILoginView {

    private final String LOG_TAG = "LOGIN_ACTIVITY";

    @Inject
    ILoginPresenter mPresenter;
    @Bind(R.id.edit_login_password)
    EditText editLoginPassword;
    @Bind(R.id.edit_login_username)
    EditText editLoginUsername;
    @Bind(R.id.progress)
    ProgressBar mProgressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        MyApplication.getObjectGraphPresenters().inject(this);
        mPresenter.setLoginView(this, getApplicationContext());
    }

    @Override
    public void onStart() {
        mPresenter.onStart();
        ButterKnife.bind(this);
        super.onStart();
    }

    @Override
    public void onResume() {
        mPresenter.onResume();
        super.onResume();
    }

    @Override
    public void onPause() {
        mPresenter.onPause();
        super.onPause();
    }

    @Override
    public void onStop() …
Run Code Online (Sandbox Code Playgroud)

mvp android android-sharedpreferences

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

Butterknife无法在我的Adapter类中绑定

我有一个适配器,用于绘制导航抽屉的布局.我的导航抽屉包含两个内部xml文件:一个是Header,另一个是Row.我在一个适配器中绘制它们,但是当我尝试setText()使用我的标头时,我无法绑定.这是我的适配器类:

public class DrawerAdapter extends RecyclerView.Adapter<DrawerAdapter.ViewHolder> {

private static final int HEADER_TYPE = 0;
private static final int ROW_TYPE = 1;
private static Context context;
private static DatabaseHelper databaseHelper;

private List<String> rows;
private List<Integer> icons;
private String driverName;

public DrawerAdapter(Context context, List<String> rows, List<Integer> icons, String driverName, DatabaseHelper databaseHelper) {
    this.icons = icons;
    this.rows = rows;
    this.context = context;
    this.driverName = driverName;
    this.databaseHelper = databaseHelper;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { …
Run Code Online (Sandbox Code Playgroud)

android butterknife

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

如何使用Android中的MVP模式从我的Interactor启动服务?

我遵循的模型视图演示者(MVP)模式类似于Antonio Leiva在这里找到的例子:antoniolg/github.

我一直在玩它很多,我想知道如何serviceinteractor图层开始.通常情况下,我一直在retrofit调用我的电话,interactor但我想知道是否有办法从服务器启动服务,interactor所以我可以retrofit在服务中运行我的电话.这里的问题是我没有运行服务的活动上下文,如果我要将上下文暴露给它,它会破坏MVP的目的interactor.

我也不太确定这是否是一件好事(从交互者那里开始服务).我正在考虑从presenter层中启动服务,但是我正在朝着如何接近它的方向走向死胡同.

如果有办法解决这个问题,请帮助一个人吗?如果这不是一个好方法,或者启发我.

java mvp service android

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

下拉列表值在Yii中未正确更新

我有三个相互依赖的下拉列表.这是代码:

 echo CHtml::dropDownList('island_id',$island,$locationsList, 
                            array('ajax'=>array('type'=>'POST',
                                                'url'=>CController::createUrl('supplierHead/getRegions'),
                                                'update'=>'#region_id',),
                                  'id'=>'island_id',
                                  'empty'=>'Choose Island',
                            )); 
    echo " ";
    echo CHtml::dropDownList('region_id',$region, $regionsList, 
                            array('ajax'=>array('type'=>'POST',
                                                'url'=>CController::createUrl('supplierHead/getProvinces'),
                                                'update'=>'#province_id',),
                                  'id'=>'region_id',
                                  'empty'=>'Choose Region',
                            ));
    echo " ";
    echo CHtml::dropDownList('province_id',$province,$provincesList, array('empty'=>'Choose Province'));
Run Code Online (Sandbox Code Playgroud)

island_id是父级,当选择一个值时,它会更新第二个下拉列表并使用相对于父级的数据填充它,然后一旦选择了第二个下拉列表的值,它就会填充第三个下拉列表的可用值.

问题:

当所有下拉列表都设置为值并且我决定更改第一个下拉列表(父项)的值时,它会更新第二个下拉列表的值,但不会更新第三个下拉列表的值.第3个下拉列表仅在我手动更改第2个下拉列表中的值时更新.此外,当第二个下拉列值更改时,第三个下拉列表更新是正确的,但父级不会更改.我怎样才能解决这个问题?

这是我的控制器:

public function actionGetRegions()
{
    $data=Locations::model()->findAll('location_parent=:location_parent AND location_id != :location_parent', array(':location_parent'=>(int) $_POST['island_id']));
    $data=CHtml::listData($data, 'location_id', 'location_name');

    foreach ($data as $value => $name) {
        echo CHtml::tag('option', array('value'=>$value), CHtml::encode($name), true);
    }
}

public function actionGetProvinces()
{
    $data=Locations::model()->findAll('location_parent=:location_parent AND location_id != :location_parent', array(':location_parent'=>(int) $_POST['region_id']));
    $data=CHtml::listData($data, 'location_id', 'location_name');

    foreach ($data as $value …
Run Code Online (Sandbox Code Playgroud)

php ajax drop-down-menu

5
推荐指数
1
解决办法
620
查看次数

如何在presenter层上编写适当的android单元测试

我假设使用 Model-View-Presenter (MVP) 模式时编写单元测试会容易得多,但我不确定如何开始。我添加了依赖项以开始编写单元测试RoboelectricMockito模拟演示者中使用的所有依赖项。

作为参考,以下是我的演示者登录示例:

public class LoginPresenterImpl implements ILoginPresenter {

@Inject
Bus bus;

@Inject
ISharedPreferencesRepository mSharedPreferencesRepository;

private final String LOG_TAG = "LOGIN_PRESENTER";
private ILoginView loginView;
private LoginInteractorImpl loginInteractor;
private long mLastClickTime = 0;

public LoginPresenterImpl() {
    MyApplication.getObjectGraph().inject(this);
    this.loginInteractor = new LoginInteractorImpl();
}

@Override
public void setLoginView(ILoginView loginView) {
    this.loginView = loginView;

    if(mSharedPreferencesRepository.isLoggedIn()) {
        Log.i(LOG_TAG, "User logged in already");
        this.loginView.navigateToHome();
    }
}

@Override
public void validateCredentials(String username, String password) {
    if(SystemClock.elapsedRealtime() - mLastClickTime < 1000)
        return; …
Run Code Online (Sandbox Code Playgroud)

mvp android unit-testing mockito

4
推荐指数
1
解决办法
4368
查看次数

Android 时间同步(UTC)

我有一个严重依赖当前时间戳的应用程序。目前,当用户提交请求时,我使用 获取 UTC 中的当前时间戳System.currentTimeMillis()。虽然这工作得很好,但当用户开始Date/Time在设备上操作它们时就会出现问题,并会导致时间戳不准确。

那为什么要在客户端呢?为什么不在服务器上处理呢?嗯,我的应用程序需要离线工作。jobQueue当互联网连接不可用时,我的所有请求都会被推送。在这些情况下,我必须知道用户执行操作的原始时间,因此如果我在 提交请求4:02pm,但由于网络问题,服务器只会在 左右收到它7:30pm,服务器必须知道我在 发送请求4:02pm

现在我考虑了哪些选择?

  1. 用户登录后,我将设备时间与服务器时间同步并将该时间存储在本地。如果用户登录时发生任何用户操作,我将监听BroadcastReceiver任何操作意图Date/Time,然后存储偏移量,以便每当用户提交请求时,我都会使用偏移量计算同步时间,以确保时间戳是准确的。
  2. 在后端完成服务器同步 api,并在我的应用程序中设置一项服务,以持续与服务器时间同步并查找任何偏差,同时监听任何用户操作。
  3. 使用推送通知并监听下游的时间同步调整,同时监听任何用户操作。
  4. 我还可以利用NTP服务器与我的设备同步时间。

我不完全确定哪一个是最佳的(假设我已经列出了所有可能的解决方案)。如果还有其他我没有想到的解决方案,请告诉我。

PS 如果我碰巧使用 来BroadcastReceiver监听设备上的任何日期时间操作,我将如何计算其中的偏移量?

datetime android

3
推荐指数
1
解决办法
2314
查看次数

Android 资源无法找到资源 ID #0x7f070024

这是我第一次遇到这样的问题,我有点傻眼了。我的问题是,每当我调试我的应用程序时,一切都很好,但只要我生成一个 apk 并通过 crashlytics 将它分发给我的 beta 测试人员,所有的地狱都失败了,我被扔了这个Resources$NotFoundExeption

我检查了我的R.java文件中的资源0x7f070024,发现它显示了:

public static final int common_google_play_services_unknown_issue=0x7f070024;
Run Code Online (Sandbox Code Playgroud)

这对我来说意义不大。然后我继续另一个字符串资源错误,它指向资源 ID 0x7f070036,它显示了我:

public static final int app_name=0x7f070036;
Run Code Online (Sandbox Code Playgroud)

我检查了这个变量的用法,我使用这个字符串资源的唯一地方是在AndroidManifest.xml

 <application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"      //**HERE**
    android:theme="@style/AppTheme">
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version"/>
    <meta-data
        android:name="io.fabric.ApiKey"
        android:value="blablablah"/>

    <activity
        android:name=".views.activities.LoginActivity"
        android:configChanges="keyboard|keyboardHidden"
        android:screenOrientation="portrait">
        <intent-filter android:label="@string/app_name"> //**HERE**
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
Run Code Online (Sandbox Code Playgroud)

为了完成这个问题,让我添加我的 gradle 文件,因为它们可能对解决这个问题很重要:

compileSdkVersion 23
buildToolsVersion "23.0.2"

defaultConfig {
    applicationId "helpme.jesus"
    minSdkVersion 16
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

dependencies …
Run Code Online (Sandbox Code Playgroud)

java android android-resources

2
推荐指数
1
解决办法
3365
查看次数

如何将List <String>属性添加到我的greendao生成器?

我正在尝试使用greendao生成器生成我的模型,我不太确定如何添加接受a的属性 List<String>

我知道如何添加List<Model>使用addToMany但如果我需要ArrayList在我的模型中存储一个怎么办?

像这样的东西:

Entity tags = schema.addEntity("Tags");
    tags.implementsInterface("android.os.Parcelable");
    tags.addLongProperty("tagId").primaryKey().autoincrement();
    tags.addLongProperty("date");
    tags.addArrayStringProperty("array"); // something like this
Run Code Online (Sandbox Code Playgroud)

我在想创造另一个实体存储阵列的所有值,并且做ToMany这样的

Entity myArray = schema.addEntity("MyArray");
    myArray.implementsInterface("android.os.Parcelable");
    myArray.addLongProperty("myArrayId").primaryKey().autoincrement();
    myArray.addLongProperty("id").notNull().getProperty();
    Property tagId = myArray.addLongProperty("tagId").getProperty();

ToMany tagToMyArray = tag.addToMany(myArray, tagId);
tagToMyArray.setName("tags");
myArray.addToOne(tag, tagId);
Run Code Online (Sandbox Code Playgroud)

android greendao

2
推荐指数
1
解决办法
1892
查看次数

AngularJS Textarea不处理换行符

我有以下html:

                <div class="form-group">
                    <div class="input-group col-sm-12">
                        <label for="" class="control-label">Comments</label>                        
                        <div class="controls">
                            <textarea id="txtArea" rows="10" cols="50" ng-model="$parent.comments" type="text"  ng-trim="false"></textarea>
                            {{comments}}
                        </div>
                    </div>
                </div>
Run Code Online (Sandbox Code Playgroud)

在我的js控制器内部是以下内容:

   $scope.updateComments = function()
     {


        $http({
            method: 'POST',
            url: '/create_comment/' + $scope.id+ '?comments=' + $scope.comments,
        })
        .success(function(data){
            $('#myModalComment').modal('hide');



        })


     }
Run Code Online (Sandbox Code Playgroud)

问题是,每当我处理textarea输入中的换行符时,它都不会处理。

例如,如果我想输入以下行:

 first line
 second line
Run Code Online (Sandbox Code Playgroud)

我的输出想要这样:

第一行第二行

我该如何解决这个问题?

更新:

万一这可能是PHP掩盖html字符的后端问题,这是我的php控制器内部的函数:

 public function createComments($id)
 {
    $comments = Input::get('comments');
    $log= Logger::find($id);
    $log->comments= $comments;
    $log->save();

 }
Run Code Online (Sandbox Code Playgroud)

html javascript php angularjs

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

Android RecyclerView和DrawerLayout相互覆盖

在我的xml文件中,我有一个recyclerView和一个导航抽屉布局.问题是,如果我将抽屉布局的代码放在RecyclerView的顶部,抽屉布局会显示但RecyclerView变为空白.

如果我反其道而行,则填充RecyclerView,但导航抽屉无处可寻.这是一个xml的东西吗?这是我的布局的xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical">

<include
    layout="@layout/app_bar"
    android:id="@+id/app_bar" />


<android.support.v7.widget.RecyclerView
    android:id="@+id/routes_recycler_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer_layout"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment
        android:id="@+id/fragment_navigation_drawer"
        android:layout_width="@dimen/nav_drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:layout="@layout/fragment_navigation_drawer"
        android:name="com.findthewayapp.fragments.NavigationDrawerFragment"
        tools:layout="@layout/fragment_navigation_drawer" />

</android.support.v4.widget.DrawerLayout>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

xml android

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

ORMLite外部字段类没有id字段

我在其他关于这个问题的问题上看到了同样的错误.正如你所看到的,似乎我没有任何错误!除非我的眼睛一直在欺骗我.有帮助吗?

这是我的两个模型:

public class Outer {

    @DatabaseField(id = true, canBeNull = false, columnName = "id")
    private int id;

    @DatabaseField
    private long parentOuterId;

    @ForeignCollectionField(eager = false)
    private ForeignCollection<Item> items;
    //getters and setters
}


public class Item {

    @DatabaseField(canBeNull = false, columnName = "id")
    private int id;

    @DatabaseField(canBeNull = false, foreign = true, foreignAutoRefresh = true)
    private Outer out;

    //getters and setters
}
Run Code Online (Sandbox Code Playgroud)

java android ormlite

0
推荐指数
1
解决办法
947
查看次数