我想抽象出在Android中获取资源,所以我写了一个ResourceProvider实际提供资源的类:
@Singleton
class ResourceProvider @Inject constructor(private val context: Context) {
fun getString(@StringRes id: Int): String {
return context.getString(id)
}
fun getString(@StringRes id: Int, vararg formatArgs: Any): String {
return context.getString(id, formatArgs)
}
...
}
Run Code Online (Sandbox Code Playgroud)
这里没什么特别的,只是在 上调用方法Context。当我想获取带参数的字符串时遇到问题,我创建了以下示例:
var fromContext = requireContext().getString(R.string.one_parameter_string, "Text")
Log.i("fromContext", fromContext)
var fromWrapper = resourceProvider.getString(R.string.one_parameter_string, "Text")
Log.i("fromWrapper", fromWrapper)
fromContext = requireContext().getString(R.string.two_parameter_string, "Text", "Text")
Log.i("fromContext", fromContext)
fromWrapper = resourceProvider.getString(R.string.two_parameter_string, "Text", "Text")
Log.i("fromWrapper", fromWrapper)
Run Code Online (Sandbox Code Playgroud)
以下是字符串资源:
<string formatted="false" name="two_parameter_string">Text with parameters: %s, %s</string>
<string formatted="false" name="one_parameter_string">Text with …Run Code Online (Sandbox Code Playgroud) 我想使用LoopJ的AsndroidAsyncHttpt将JSON作为POST发送到我的localhost服务器.我正在使用这种方法:
public void post(Context context, String url, HttpEntity entity, String contentType, AsyncHttpResponseHandler responseHandler)
在我的代码中,但它不起作用.这是我的代码:
private void loginUser() throws JSONException, UnsupportedEncodingException {
String login = textLogin.getText().toString();
String password = textPassword.getText().toString();
JSONObject jsonObject = new JSONObject();
if(Utility.isNotNull(login) && Utility.isNotNull(password)) {
jsonObject.put("username", login);
jsonObject.put("password", password);
invokeWS(jsonObject);
}
else{
Toast.makeText(getApplicationContext(), "Prosz? wype?ni? wszystkie pola!", Toast.LENGTH_LONG).show();
}
}
private void invokeWS(JSONObject jsonObject) throws UnsupportedEncodingException {
StringEntity entity = new StringEntity(jsonObject.toString());
AsyncHttpClient client = new AsyncHttpClient();
Log.i("SER", "http://" + Constants.address + ":" + Constants.port + "/silownia_java/rest/login/auth" …Run Code Online (Sandbox Code Playgroud) 我想更改与导航组件一起使用的 ActionBar 中的向上按钮图标。我尝试了几种选择,例如:
supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_arrow_left_blue_24dp)
Run Code Online (Sandbox Code Playgroud)
在MainAcitivty或
app:navigationIcon="@drawable/ic_arrow_left_blue_24dp"
Run Code Online (Sandbox Code Playgroud)
在Toolbar.xml 文件中,似乎没有任何效果。
我有一个非常标准的设置
setSupportActionBar(appToolbar.toolbar)
setupActionBarWithNavController(this, navController)
Run Code Online (Sandbox Code Playgroud)
在MainActivity:onCreate方法中调用。
我希望
supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_arrow_left_blue_24dp)
Run Code Online (Sandbox Code Playgroud)
会起作用,因为例如ActionBar通过调用禁用标题:
supportActionBar?.setDisplayShowTitleEnabled(false)
Run Code Online (Sandbox Code Playgroud)
按预期工作,Fragment导航时标题未设置为名称。
更重要的是,我进行了一些调查,ActionBarOnDestinationChangedListener其中有一个调用将setNavigationIcon图标设置为DrawerArrowDrawable,这有点奇怪,因为我没有Drawer在我的设置中使用。
也改为:
setupWithNavController(toolbar, navController)
Run Code Online (Sandbox Code Playgroud)
不工作,因为ToolbarOnDestinationChangedListener也使用相同的DrawerArrowDrawable.
android android-navigation android-jetpack android-architecture-navigation
我想知道,在Flask中创建SQLAlchemy数据库需要做些什么.根据文档,我应该在我的Flask应用程序中创建模型然后转到Python shell并使用db.create_all()创建它.但这不起作用.
我的烧瓶应用:
import os
import flask
import settings
from flask_sqlalchemy import SQLAlchemy
app = flask.Flask(__name__)
app.config['SESSION_TYPE'] = 'filesystem'
app.secret_key = os.urandom(24)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////database.db'
db = SQLAlchemy(app)
(...)
Run Code Online (Sandbox Code Playgroud)
模型:
from app import db
class User(db.Model):
id = db.Column(db.Integer, primary_key = True)
username = db.Column(db.String(15), unique = True)
password = db.Column(db.String(15), unique = True)
tasks = db.relationship('Task', backref='author', lazy='dynamic')
def __init__(self, username, password):
self.username = username
self.password = password
class Task(db.Model):
id = db.Column(db.Integer, primary_key = …Run Code Online (Sandbox Code Playgroud) 我想制作通用适配器,让我可以重用它。这就是为什么我决定不创建 view by inflating,而是将之前创建的自定义视图传递给ViewHolderin ListAdapter( RecyclerView) in onCreateViewHolder。根据其文档,它应该是可能的,因为它说:
您可以手动创建新视图,也可以从 XML 布局文件对其进行扩充。
这是我的适配器实现:
class BaseAdapter<T, V : View>(
private val adapterConfig: AdapterConfig<T, V>,
private val onClick: (T) -> (Unit)
) : ListAdapter<T, BaseViewHolder<V>>(adapterConfig.diffCallback) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder<V> {
return adapterConfig.viewHolder.apply {
itemView.setOnClickListener { onClick(getItem(adapterPosition)) }
}
}
override fun onBindViewHolder(holder: BaseViewHolder<V>, position: Int) {
adapterConfig.bind(getItem(position), holder, position)
}
}
Run Code Online (Sandbox Code Playgroud)
AdapterConfig实现类负责创建ViewHolder,它看起来像这样:
override val viewHolder: BaseViewHolder<ScorerView> …Run Code Online (Sandbox Code Playgroud) 我在安装jpl库时遇到问题.我安装了最新的swipl版本(但之前我也尝试过不稳定的版本):
SWI-Prolog 7.2.3 for Windows 7/8/10 64-bit edition
Run Code Online (Sandbox Code Playgroud)
然后我添加了依赖路径到环境变量:
Variable: SWI_HOME_DIR
Value: C:\Program Files\swipl
Run Code Online (Sandbox Code Playgroud)
然后我补充说,Path这些值:
%SWI_HOME_DIR%\lib\jpl.jar;
%SWI_HOME_DIR%\lib;
%SWI_HOME_DIR%\bin
Run Code Online (Sandbox Code Playgroud)
我还添加了这样的VM参数:
-Djava.library.path="C:\Program Files\swipl\bin"
Run Code Online (Sandbox Code Playgroud)
确保Eclipse看到此文件夹.
之后我仍然得到错误:
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: C:\Program Files\swipl\bin\jpl.dll: Can't find dependent libraries
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1937)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1855)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at org.jpl7.JPL.loadNativeLibrary(JPL.java:79)
at org.jpl7.fli.Prolog.<clinit>(Prolog.java:41)
at org.jpl7.Query.open(Query.java:260)
at org.jpl7.Util.textToTerm(Util.java:102)
at org.jpl7.Query.Query1(Query.java:129)
at org.jpl7.Query.<init>(Query.java:120)
Run Code Online (Sandbox Code Playgroud)
我100%肯定,Eclipse会看到该jpl.dll文件,但在我看来,它似乎需要一些其他库.
我知道这个帖子可能与以下任何一个都重复:
jpl.dll:找不到依赖库
JPL找不到jpl.dll的依赖库
但这些问题没有得到解答,或者答案在我的案例中没有帮助.
我已经从稳定频道安装了Android Studio 3.5。我正在尝试构建Android Automotive Emulator,但收到以下错误
没有为此目标安装系统映像
我已经下载了以下系统映像
Google API Intel x86 Atom_64系统映像
当我尝试制作电话/平板电脑模拟器时,将显示此图像。我正在使用Mac Mojave。我是否需要安装Android 10系统映像来解决此错误?
set_password_hash我有一个用户模型,具有使用 Werkzeug和函数设置和检查密码的功能check_password_hash。
模型.py
class User(db.Model):
id = db.Column(db.Integer, primary_key = True)
username = db.Column(db.String(15), unique = True)
password = db.Column(db.String(15))
tasks = db.relationship('Task', backref='author', lazy='dynamic')
def __init__(self, username, password):
self.username = username
self.set_password(password)
def set_password(self, password):
self.password = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.password, password)
Run Code Online (Sandbox Code Playgroud)
登录.py
def post(self):
username = flask.request.form['username']
passwd = flask.request.form['passwd']
user = User.query.filter_by(username = username).first()
flask.flash(user.check_password(user.password))
if user and user.check_password(user.password):
flask.session['username'] = username
else:
flask.flash("User doesn't exist or password is inccorect.")
return flask.render_template('login.html') …Run Code Online (Sandbox Code Playgroud) 如何在运行时更改上传文件夹?我希望能够更改文件上传到的位置,但我不知道如何更改。
我试过这样的事情,但我得到KeyError:
@app.route('/upload', methods=['POST'])
def upload():
file = request.files['file']
path = 'uploads/text'
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
UPLOAD_FOLDER = path
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return redirect(url_for('uploaded_file',
filename=filename))
Run Code Online (Sandbox Code Playgroud) 我收到,而试图注入下面的错误ViewModelProvider.Factory为Activity:
e: D:\AndroidStudioProjects\VolleyballStats\app\build\tmp\kapt3\stubs\debug\com\example\kamil\volleyballstats\di\AppComponent.java:6: error: [dagger.android.AndroidInjector.inject(T)] java.util.Map<java.lang.Class<? extends android.support.v4.app.Fragment>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends android.support.v4.app.Fragment>>> cannot be provided without an @Provides-annotated method.
e:
e: public abstract interface AppComponent extends dagger.android.AndroidInjector<com.example.kamil.volleyballstats.VolleyballStatsApp> {
e: ^
e: java.util.Map<java.lang.Class<? extends android.support.v4.app.Fragment>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends android.support.v4.app.Fragment>>> is injected at
e: dagger.android.DispatchingAndroidInjector.<init>(injectorFactories)
e: dagger.android.DispatchingAndroidInjector<android.support.v4.app.Fragment> is injected at
e: dagger.android.support.DaggerAppCompatActivity.supportFragmentInjector
e: com.example.kamil.volleyballstats.views.main.MainActivity is injected at
e: dagger.android.AndroidInjector.inject(arg0)
Run Code Online (Sandbox Code Playgroud)
我已经创建了非常标准的Dagger2实现,如下所示:
@Singleton
@Component(modules = arrayOf(
AndroidInjectionModule::class,
AppModule::class,
MainActivityModule::class))
interface AppComponent : AndroidInjector<VolleyballStatsApp> {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: VolleyballStatsApp): Builder
fun …Run Code Online (Sandbox Code Playgroud) android ×5
flask ×3
python ×3
java ×2
kotlin ×2
android-architecture-navigation ×1
dagger-2 ×1
dll ×1
eclipse ×1
hash ×1
json ×1
jvm ×1
prolog ×1
sqlalchemy ×1
swi-prolog ×1