小编jel*_*ish的帖子

Google Gson - 反序列化列表<class>对象?(通用型)

我想通过Google Gson传输列表对象,但我不知道如何反序列化泛型类型.

我看后试了一下这个(BalusC的答案):

MyClass mc = new Gson().fromJson(result, new List<MyClass>(){}.getClass());
Run Code Online (Sandbox Code Playgroud)

但是我在eclipse中得到一个错误,说"类型新List(){}必须实现继承的抽象方法......"如果我使用快速修复,我会得到一个超过20个方法存根的怪物.

我很确定有一个更简单的解决方案,但我似乎无法找到它!

编辑:

我现在有

Type listType = new TypeToken<List<MyClass>>()
                {
                }.getType();

MyClass mc = new Gson().fromJson(result, listType);
Run Code Online (Sandbox Code Playgroud)

但是,我在"fromJson"行中得到以下异常:

java.lang.NullPointerException
at org.apache.harmony.luni.lang.reflect.ListOfTypes.length(ListOfTypes.java:47)
at org.apache.harmony.luni.lang.reflect.ImplForType.toString(ImplForType.java:83)
at java.lang.StringBuilder.append(StringBuilder.java:203)
at com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:56)
at com.google.gson.JsonDeserializationVisitor.invokeCustomDeserializer(JsonDeserializationVisitor.java:88)
at com.google.gson.JsonDeserializationVisitor.visitUsingCustomHandler(JsonDeserializationVisitor.java:76)
at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:106)
at com.google.gson.JsonDeserializationContextDefault.fromJsonArray(JsonDeserializationContextDefault.java:64)
at com.google.gson.JsonDeserializationContextDefault.deserialize(JsonDeserializationContextDefault.java:49)
at com.google.gson.Gson.fromJson(Gson.java:568)
at com.google.gson.Gson.fromJson(Gson.java:515)
at com.google.gson.Gson.fromJson(Gson.java:484)
at com.google.gson.Gson.fromJson(Gson.java:434)
Run Code Online (Sandbox Code Playgroud)

抓JsonParseExceptions和"结果"是不为空.

我用调试器检查了listType,得到了以下内容:

  • 列表类型
    • args = ListOfTypes
      • list = null
      • resolvedTypes =类型[1]
    • loader = PathClassLoader
    • ownerType0 = null
    • ownerTypeRes = null
    • rawType …

java generics json gson

409
推荐指数
9
解决办法
29万
查看次数

在Android上限制ListView的高度

我想在一个下面显示一个按钮ListView.问题是,如果ListView扩展(添加了项目......),按钮将被推出屏幕.

我尝试了一个LinearLayout带权重(如Android所示:为什么没有一个视图的maxHeight?),但要么我的权重错了,要么根本不起作用.

另外,我发现某处使用了一个提示RelativeLayout.在ListView随后将被与按钮上方设置android:layout_abovePARAM.

问题是我不知道如何在按钮后放置按钮.在我发现的示例中,使用下面的视图ListView进行了调整android:layout_alignParentBottom,但我不希望我的按钮粘在屏幕的底部.

除了使用setHeight方法和一些计算所需空间之外的任何想法?


编辑: 我得到了很多有用的答案.

  • bigstone的用户和用户639183的解决方案几乎完美无缺.但是,我不得不在按钮的底部添加额外的填充/边距,因为它仍然会被推出屏幕的一半(但随后停止)

  • 如果您希望按钮固定在屏幕底部,Adinia对相对布局的回答很好.这不是我的意图,但仍可能对其他人有用.

  • AngeloS的解决方案是我最后选择的解决方案,因为它创造了我想要的效果.但是,我LinearLayout对按钮周围做了两处小改动:

    • 首先,因为我不希望在我的布局任何绝对值,我换android:layout_height="45px"wrap_content,其工作也很不错.

    • 其次,因为我希望按钮水平居中,只有垂直支持LinearLayout,我将android:orientation ="horizo​​ntal"改为"vertical".

    AngeloS在他的帖子中也说过,他不确定周围的android:layout_weight="0.1"参数是否有任何影响; 我刚试过,它确实做到了!没有,按钮再次被推出屏幕.LinearLayoutListView

layout android listview android-layout

88
推荐指数
6
解决办法
8万
查看次数

Android Honeycomb:NetworkOnMainThreadException即使使用AsyncTask而且没有严格模式?

我用我的Android 3.0应用程序遇到了NetworkOnMainThreadException.正在寻找解决方案我找到了这个,但如果我理解正确,默认设置将是关闭严格模式.

此外,我的所有网络访问都在一个AsyncTask,所以我无论如何也看不到这个例外中的重点.

所以,我现在非常绝望,我应该做些什么来阻止这个...

亲切的问候,水母

编辑:

这篇博客文章说AsyncTask应该足够了,但至少可以澄清StrictMode点.

解:

我关闭了StrictMode(它可能更好地保留一些设置,但我不能打扰......):

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
Run Code Online (Sandbox Code Playgroud)

在那之后,我确实遇到了"java.lang.RuntimeException:这个线程禁止HTTP请求",但是在这里找到了解决方案.不过我有点困惑,因为AndroidHttpClient我在Android 2.0+应用程序中使用它时效果很好......

解决方案,第2部分

事实证明,使用AsyncTask是一个不错的主意但如果做错了就没用了 ......所以严格模式的反应没有任何问题.应该听,呃?;)

仍然很高兴知道它默认在Honeycomb上激活.

android android-asynctask android-3.0-honeycomb android-strictmode

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

Android Honeycomb:如何更改FrameLayout中的碎片,而无需重新创建它们?

是否可以在片段之间切换而无需一直重新创建片段?如果是这样,怎么样?

在文档中,我找到了如何替换Fragments的示例.

// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit();
Run Code Online (Sandbox Code Playgroud)

但我不希望每次需要时都从头开始创建我的碎片.

我还发现了这个 隐藏/显示片段的例子:

// The content view embeds two fragments; now retrieve them and attach
// their "hide" button.
FragmentManager fm = getFragmentManager();
addShowHideListener(R.id.frag1hide, fm.findFragmentById(R.id.fragment1));
addShowHideListener(R.id.frag2hide, fm.findFragmentById(R.id.fragment2));
Run Code Online (Sandbox Code Playgroud)

但是,如何在XML文件外部创建一个带有ID的片段?

我认为这可能与这个问题有关,但没有答案.:/ …

android android-fragments android-3.0-honeycomb

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

Android 3.0 Honeycomb:如何在Action Bar中启用/禁用菜单项?

在XML中禁用菜单项非常容易:

<item android:id="@+id/men_1" 
    android:title="@string/men_1" 
    android:showAsAction="ifRoom|withText"
    android:icon="@drawable/ic_menu_1"
    android:enabled="false"/>
Run Code Online (Sandbox Code Playgroud)

通过<3.0 app上的代码更改它也很容易:

@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
  super.onPrepareOptionsMenu(menu);

  MenuItem item = menu.findItem(R.id.men_1);
  item.setEnabled(false);

  return true;
}
Run Code Online (Sandbox Code Playgroud)

但是我如何在Android 3.x上做到这一点?我想根据显示的片段禁用菜单选项.

亲切的问候,水母

menu android-3.0-honeycomb

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

Android:如何访问默认文本颜色?(没有主题,只有标准的主题)

非常简短的问题:如果我想将一些文本(在TextView中)设置回默认文本颜色,我该怎么做?

我没有使用任何主题.

user-interface android textcolor

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

Android:AndroidHttpClient - 如何设置超时?

我已经按照kuester2000的答案的说明,但我的超时设置似乎不起作用.

try
{
    int timeout = 3000;
    URL myURL = //some valid URL

    AndroidHttpClient = AndroidHttpClient.newInstance("name");
    HttpGet httpGet = new HttpGet(myURL.toExternalForm());

    HttpParams httpParams = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(httpParams, timeout);
    HttpConnectionParams.setSoTimeout(httpParams, timeout);

    HttpResponse response = httpClient.execute(httpGet);

    //...
}
catch (SocketTimeoutException e)
{
    e.printStackTrace();
}
catch (ConnectTimeoutException e)
{
    e.printStackTrace();
}
catch (IOException e)
{
    e.printStackTrace();
}
//...
Run Code Online (Sandbox Code Playgroud)

但是,超时值不会改变任何内容.

在我联系的答案中,它还说:

连接超时抛出"java.net.SocketTimeoutException:Socket未连接"和套接字超时"java.net.SocketTimeoutException:操作超时".

但我得不到.相反,我得到"org.apache.http.conn.ConnectTimeoutException:连接到...超时"

有人可以帮助我吗?哪里出错了?

java networking android timeout http

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

Jetty Server - 如何使用参数处理GET请求?

这一定非常简单,但我找不到答案.

是一个关于如何使用jetty服务器监听get请求的简单示例.

但是,它并没有涵盖它不只是一个"的情况下http://www.foo.com/bar像""的要求,但一些http://www.foo.com/bar?name=guy&value=1 ".

那么如何在jetty中获取参数?

java servlets get http jetty

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

Java:Foreach循环在int数组上没有按预期工作?

我有一个非常简单的循环:

int[] positions = {1, 0, 0}

//print content of positions

for (int i : positions)
{
    if (i <= 0) i = -1;
}

//print content of positions
Run Code Online (Sandbox Code Playgroud)

现在,我期望获得的是:

array: 1, 0, 0
array: 1, -1, -1
Run Code Online (Sandbox Code Playgroud)

但我得到了

array: 1, 0, 0
array: 1, 0, 0
Run Code Online (Sandbox Code Playgroud)

只是......为什么?

亲切的问候,水母

java arrays foreach loops

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

Android:launchMode = SingleTask问题

我有一个围绕主要活动(主菜单)的应用程序.在每个其他应用程序中,有一个选项菜单项,指向此活动.

首先,我总是在选择此项目时启动一个新的主要活动.使用intent bundle,我确实告诉了主要的活动,我在一个新的开始时做的一些初始化是没有必要的.

但是,我不太喜欢整体行为.我偶然发现android:launchMode="SingleTask"这似乎有所帮助:现在我不会一直重建我的主菜单活动; 另外,如果我按下"后退"按钮,我会直接回到主屏幕.这感觉非常像一个适当的"主菜单".

我现在的问题是:如果我运行我的应用程序的另一个活动,按主页按钮,然后重新打开我的应用程序(例如使用"最后的应用程序"),然后我不会回到上一个活动,而是回到主要活动.其他活动被销毁.

任何想法如何实现行为,SingleTask而不仅仅能够返回到一个活动?

java android launchmode android-activity

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