小编Blu*_*ell的帖子

Moshi - 解析未知的json键

我如何用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)

java parsing json gson moshi

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

Android布局使用layout_weight,layout_width和maxWidth

我正在尝试获得一行类似的文本

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设置为0diplayout_weight1意味着它们将占用每个可用空间的50%.

设置singleLineto trueellipsizeto true意味着它们看起来像foofoo ...如果文本大于容器.

因此,我的结果(如果文本更长)应该是

foofoo .. - barbar ..

这是什么!这样可行.

现在我正在尝试修复的情况是,如果第一个TextView(id:text_1)的文本小于给定的50%layout_width="0dip",layout_weight="1"我想要它wrap_content …

android textview android-layout android-layout-weight

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

WebView不会播放嵌入式Flash视频

我正在测试运行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的设置上调用隐藏属性以启用闪存等.没有任何作用.

请帮忙!

谢谢,

flash video android android-webview

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

Android和OOP - 全局变量与片段中的继承Getters

在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性质和性能的反馈(虽然可能是微不足道的).

java oop performance android design-patterns

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

抛出异常或返回null

如果我有以下功能,有两个选择

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我的代码无论如何都不会工作,这是正确的请抛出异常吗?

我的选择是:

  1. 返回null,应用程序将在某些边缘情况下获得NullPointerException
  2. 返回null并使用(myObject!= null)检查包装方法
  3. 抛出一个异常会在运行时将其炸毁

我想我要问的是,这是抛出异常的正确位置吗?也就是说,如果遇到这种情况,我无能为力.这被归类为'例外'还是我应该检查我的方法返回什么(这使我的代码看起来很糟糕).如果我知道它不应该返回null那么我应该抛出异常吗?

另外,我如何选择什么异常,或者扩展一个并抛出我自己的异常呢?

java null coding-style exception

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

VideoVideo - 视频宽度x高度 - MediaPlayer问题

我写了一个示例应用程序来重现问题:

https://github.com/blundell/VideoRatioProblemPerDevice

VideoView文档状态:

显示视频文件....负责从视频计算其测量值,以便可以在任何布局管理器中使用,并提供各种显示选项,如缩放

问题是三星Galaxy S3对视频做了奇怪的事情而不尊重视频的比例.(也发生在HTC设备上).

全屏片段的活动:

我发现,当在三星Galaxy S3上播放视频时,它将以不正确的比例播放.看起来它已被拉伸到视图的高度而不考虑原始视频的比例.

这里: 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)

android media-player android-fragments android-videoview

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

在recyclerview中设置适配器

我正在尝试使用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)

android android-fragments android-recyclerview

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

Flutter 使用 --enable-software-rendering 构建 apk?

是否有可能做这样的事情:

flutter build apk --enable-software-rendering
Run Code Online (Sandbox Code Playgroud)

我需要一个发布版本,其执行方式如下:

flutter run --enable-software-rendering --profile
Run Code Online (Sandbox Code Playgroud)

谢谢你。

dart flutter

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

在Android Studio 4.0(金丝雀)中找不到预览窗口的位置

我正在阅读有关在Android Studio 4.0(Canary)中运行的Jetpack的教程,请参考下面的链接。

https://developer.android.com/jetpack/compose/tutorial

一切都准备就绪,但由于尝试预览“可组合”方法而无法找到预览窗口。

有人可以给我确切的提示预览窗口在哪里吗?

android android-studio android-jetpack-compose android-studio-4.0

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

Android AppWidget配置 - 从新任务开始

我搜索并搜索并搜索了这个!

所以我有一个应用程序小部件,它有一个配置活动,我可以在应用程序上按下按钮时打开.场景是:

该应用程序打开了.

使用主页按钮关闭应用程序.

选择添加我的小部件

我已经配置了小部件.

放在我的主屏幕上

然后使用窗口小部件上的按钮再次打开配置活动.

按回来取消新配置将把我带回应用程序.

按下后我想回家.

基本上我要问的是.如何在自己的任务/堆栈中启动配置活动?

我已经调查了意图过滤器,但我只是不太确定,或者它可能与它所在的包有关,或者它可能是不可能的!

我想这可能与我用来启动配置活动的意图有关

 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):活动作为新任务启动,因此取消活动结果.

所以仍然没有找到解决方案.

configuration stack android manifest android-appwidget

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