我如何用moshi解析一个json结构,它具有在编译时未知的键:
"foo": {
"name": "hello",
"bar": {
"unknownKey1": {
"a": "1"
}
},
"unknownKey2": {
"b": "2"
},
"unknownKeyX": {
"c": "X"
}
},
"properties": {...}
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用@FromJson适配器,JSONObject但日志只是说json是空的{}(我期望的地方{"unknownKey1": { ... etc ...})
class Foo {
@Json(name = "name")
String name;
@Json(name = "bar")
Bar bar;
static class Bar {
}
}
class BarAdapter {
@FromJson
Bar fromJson(JSONObject json) {
Log.d("xxx", "got " + json.toString());
return new Bar();
}
}
Run Code Online (Sandbox Code Playgroud)
一旦我可以进入json内部栏,我可以手动迭代它以添加到列表或其他东西(因为我不知道将有多少项).
像这样使用它:
Moshi …Run Code Online (Sandbox Code Playgroud) 我正在尝试获得一行类似的文本
foofoofoo - barbarbar
但我希望椭圆foo和bar如果它不适合一行.即我正试图缩短它们.
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:id="@+id/text_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:maxWidth="0dip"
android:layout_weight="1"
android:textColor="#ffffff"
android:singleLine="true"
android:ellipsize="true"
android:text="foofoofoofoo" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffff"
android:text=" - " />
<TextView
android:id="@+id/text_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="0dip"
android:layout_weight="1"
android:textColor="#ffffff"
android:singleLine="true"
android:ellipsize="true"
android:text="barbarbarbar" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
跟我一起这部分工作.
将TextViews layout_width设置为0dip和layout_weight将1意味着它们将占用每个可用空间的50%.
设置singleLineto true和ellipsizeto true意味着它们看起来像foofoo ...如果文本大于容器.
因此,我的结果(如果文本更长)应该是
foofoo .. - barbar ..
这是什么!这样可行.
现在我正在尝试修复的情况是,如果第一个TextView(id:text_1)的文本小于给定的50%layout_width="0dip",layout_weight="1"我想要它wrap_content …
我正在测试运行OS 3.2的Xoom设备.该项目是使用3.1库构建的(在Eclipse中).
我安装了最新版本的闪存,嵌入式闪存在平板电脑的浏览器中播放得很好.
如果我创建这样的活动:
WebView browser = (WebView) findViewById(R.id.browserView);
browser .getSettings().setJavaScriptEnabled(true);
browser .getSettings().setPluginsEnabled(true);
browser .loadUrl("http://m.kongregate.com/games/Jiggmin/the-game-of-disorientation-mobile");
Run Code Online (Sandbox Code Playgroud)
然后我听到闪光灯播放的声音,但它显示为白色的盒子.
同样,具有嵌入式闪存的任何其他页面也存在同样的问题.我也试过制作一个包含静态HTML内容的字符串,然后将其加载到浏览器中......但是它有同样的问题.
我已经阅读了我可以在网上找到的每个解决方案,从设置视图到隐藏,直到调用onPageFinish事件,扩展WebView类,以及为此烦恼.我已经尝试过反射,在WebView的设置上调用隐藏属性以启用闪存等.没有任何作用.
请帮忙!
谢谢,
垫
在Fragment中,每次需要对活动的引用或创建全局变量"mActivity"并使用它时,都应该调用getActivity().
基本上你已经有一个Activity对象(getActivity()),感觉就像创建一个全局(mActivity)是代码重复并创建一个不需要的额外引用. 但是使用getActivity()到处都看起来很可怕并且每次做多个方法调用都会感觉不对(性能?).
// Pseudo Android
public class MyFragent extends Fragment {
private Activity mActivity; // Global
public void onActivityCreated(Bundle b){
mActivity = getActivity();
}
public void onClick(View v){
randomMethodTakingActivity(mActivity);
// or
randomMethodTakingActivity(getActivity());
}
private void someMethod(){
randomMethodTakingActivity(mActivity);
// or
randomMethodTakingActivity(getActivity());
}
private void anotherMethod(){
mActivity.someCallback();
// or
getActivity().someCallback();
}
}
Run Code Online (Sandbox Code Playgroud)
这也与getApplication()或getView()相关;
我已阅读Coding for Performance,但看不到任何相关内容.我想要一些关于OO性质和性能的反馈(虽然可能是微不足道的).
如果我有以下功能,有两个选择
private MyObject findBlank() {
for (int i = 0; i < pieces.length; i++) {
if(pieces[i].isBlank()){
return pieces[i];
}
}
return null;
}
private MyObject findBlank() {
for (int i = 0; i < pieces.length; i++) {
if(pieces[i].isBlank()){
return pieces[i];
}
}
throw new NoSuchFieldError("No blank piece found!");
}
Run Code Online (Sandbox Code Playgroud)
从这个方法我知道它应该总是返回一个对象,其中一个'件'总是isBlank() == true,最后的返回null只是为了取悦编译器.既然是这种情况,如果它返回null我的代码无论如何都不会工作,这是正确的请抛出异常吗?
我的选择是:
我想我要问的是,这是抛出异常的正确位置吗?也就是说,如果遇到这种情况,我无能为力.这被归类为'例外'还是我应该检查我的方法返回什么(这使我的代码看起来很糟糕).如果我知道它不应该返回null那么我应该抛出异常吗?
另外,我如何选择什么异常,或者扩展一个并抛出我自己的异常呢?
我写了一个示例应用程序来重现问题:
https://github.com/blundell/VideoRatioProblemPerDevice
该VideoView文档状态:
显示视频文件....负责从视频计算其测量值,以便可以在任何布局管理器中使用,并提供各种显示选项,如缩放
问题是三星Galaxy S3对视频做了奇怪的事情而不尊重视频的比例.(也发生在HTC设备上).
全屏片段的活动:
我发现,当在三星Galaxy S3上播放视频时,它将以不正确的比例播放.看起来它已被拉伸到视图的高度而不考虑原始视频的比例.
这里:

但是,如果我在三星Galaxy Nexus上播放视频,则视频的比例正确.
这里:

如果我强制视频占据片段的全部大小,它在S3上看起来没问题(因为屏幕的比例是视频的比例).但是我不想这样做,因为它搞砸了在其他地方使用的片段,即平板电脑.
代码是:
带有VideoView片段的活动.可以在这里看到:GITHUB CODE LINK
如果你想要一些代码在这里是hte VideoPlayerFragment:
public class VideoPlayerFragment extends Fragment {
private static final String TAG = "VideoPlayer";
private FitVideoView videoView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_video_player, container, false);
videoView = (FitVideoView) root.findViewById(R.id.surface);
return root;
}
public void playVideo() {
Uri uri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.test_vid);
Log.d(TAG, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用recyclerview并设置适配器,但我收到错误: -
没有适配器; 跳过布局所以请帮我解决这个问题
public class FragmentTwo extends Fragment {
private AppAdapter mAppAdapter;
private ArrayList<Model> mModel;
@Bind(R.id.recycler_view)
RecyclerView recyclerView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_two, container, false);
ButterKnife.bind(this, v);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(mAppAdapter);
parseData();
return v;
}
private void parseData() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("url")
.addConverterFactory(GsonConverterFactory.create())
.build();
ReqInterface reqInterface = retrofit.create(ReqInterface.class);
Call<Model> call = reqInterface.getAdvanceData("france");
call.enqueue(new Callback<Model>() {
@Override
public void onResponse(Call<Model> call, Response<Model> response) { …Run Code Online (Sandbox Code Playgroud) 是否有可能做这样的事情:
flutter build apk --enable-software-rendering
Run Code Online (Sandbox Code Playgroud)
我需要一个发布版本,其执行方式如下:
flutter run --enable-software-rendering --profile
Run Code Online (Sandbox Code Playgroud)
谢谢你。
我正在阅读有关在Android Studio 4.0(Canary)中运行的Jetpack的教程,请参考下面的链接。
https://developer.android.com/jetpack/compose/tutorial
一切都准备就绪,但由于尝试预览“可组合”方法而无法找到预览窗口。
有人可以给我确切的提示预览窗口在哪里吗?
android android-studio android-jetpack-compose android-studio-4.0
我搜索并搜索并搜索了这个!
所以我有一个应用程序小部件,它有一个配置活动,我可以在应用程序上按下按钮时打开.场景是:
该应用程序打开了.
使用主页按钮关闭应用程序.
选择添加我的小部件
我已经配置了小部件.
放在我的主屏幕上
然后使用窗口小部件上的按钮再次打开配置活动.
按回来取消新配置将把我带回应用程序.
按下后我想回家.
基本上我要问的是.如何在自己的任务/堆栈中启动配置活动?
我已经调查了意图过滤器,但我只是不太确定,或者它可能与它所在的包有关,或者它可能是不可能的!
我想这可能与我用来启动配置活动的意图有关
Intent configIntent = new Intent(this, Configuration.class);
configIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
remoteView.setOnClickPendingIntent(R.id.config, PendingIntent.getActivity(this, 0, configIntent, PendingIntent.FLAG_UPDATE_CURRENT));
Run Code Online (Sandbox Code Playgroud)
也许是因为我用'this'作为上下文启动它,它总是在我的应用程序堆栈中启动...但是挂起的意图api是:PendingIntent API 1 "注意,活动将在现有活动的上下文之外启动"
所以,是的,我现在就停止说话,因为我最终会进入圈内!
编辑
所以android:launchMode="singleInstance"在清单中尝试过就像所说的那样.这有效但它会阻止'startActivityForResult'行为正常工作.(这是配置活动的全部原因)获取错误:
WARN/ActivityManager(59):活动作为新任务启动,因此取消活动结果.
所以仍然没有找到解决方案.