我想通过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,得到了以下内容:
我想在一个下面显示一个按钮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 ="horizontal"改为"vertical".
AngeloS在他的帖子中也说过,他不确定周围的android:layout_weight="0.1"参数是否有任何影响; 我刚试过,它确实做到了!没有,按钮再次被推出屏幕.LinearLayoutListView
我用我的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
是否可以在片段之间切换而无需一直重新创建片段?如果是这样,怎么样?
在文档中,我找到了如何替换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的片段?
我认为这可能与这个问题有关,但没有答案.:/ …
在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上做到这一点?我想根据显示的片段禁用菜单选项.
亲切的问候,水母
非常简短的问题:如果我想将一些文本(在TextView中)设置回默认文本颜色,我该怎么做?
我没有使用任何主题.
我已经按照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:连接到...超时"
有人可以帮助我吗?哪里出错了?
这一定非常简单,但我找不到答案.
这是一个关于如何使用jetty服务器监听get请求的简单示例.
但是,它并没有涵盖它不只是一个"的情况下http://www.foo.com/bar像""的要求,但一些http://www.foo.com/bar?name=guy&value=1 ".
那么如何在jetty中获取参数?
我有一个非常简单的循环:
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)
只是......为什么?
亲切的问候,水母
我有一个围绕主要活动(主菜单)的应用程序.在每个其他应用程序中,有一个选项菜单项,指向此活动.
首先,我总是在选择此项目时启动一个新的主要活动.使用intent bundle,我确实告诉了主要的活动,我在一个新的开始时做的一些初始化是没有必要的.
但是,我不太喜欢整体行为.我偶然发现android:launchMode="SingleTask"这似乎有所帮助:现在我不会一直重建我的主菜单活动; 另外,如果我按下"后退"按钮,我会直接回到主屏幕.这感觉非常像一个适当的"主菜单".
我现在的问题是:如果我运行我的应用程序的另一个活动,按主页按钮,然后重新打开我的应用程序(例如使用"最后的应用程序"),然后我不会回到上一个活动,而是回到主要活动.其他活动被销毁.
任何想法如何实现行为,SingleTask而不仅仅能够返回到一个活动?