我有JSON字符串,如下所示
{ "Status":"Clear", "Class": [{ <br>
{"name":"personA", "available" : 1}, <br>
{"name":"personB", "available" : 0}, <br>
{"name":"personC", "available" : 0}, <br>
{"name":"personD", "available" : 1} <br>
}] }
Run Code Online (Sandbox Code Playgroud)
如何反序列化上面的JSON字符串?
我想到了使用JSONObject将整个JSON String带入其中,但不知道如何获取对象的arraylist(Class对象的列表)并分配给arraylist <Class>.
非常感谢指导和帮助.
更新:
解决方案和解决方案
我已经解决了这个问题,但我想我必须解释我使用这种解决方案的原因和原因.
所以为了进一步解释我的问题,这是一个json字符串,最初是一个被序列化并从webservice发送到我的应用程序的对象.
原始对象是这样的:
public class StatusJson
{
public String Status { get; set; }
public List<Class> Class { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
所以我要做的就是在我的android中声明一个完全相同的类然后使用这个代码
statusJson statusJSON=g.fromJson(JSonString,StatusJson.class);
Run Code Online (Sandbox Code Playgroud)
它会自动将json字符串解析为完全相同的类格式.
如果您直接发送像我这样的JSON序列化类,希望这对您也有帮助.
我正在尝试将HMAC添加到标题中.它工作正常.但是在某些设备上随机抛出NPE.以下是完整的代码.
使用okhttp v3.4.1,okio v1.9.0和retrofit v2.1.0
OkHttpClient.Builder okHttp = new OkHttpClient().newBuilder();
okHttp.connectTimeout(Constants.CONNECTION_TIMEOUT, TimeUnit.MILLISECONDS);
okHttp.readTimeout(Constants.CONNECTION_TIMEOUT, TimeUnit.MILLISECONDS);
okHttp.writeTimeout(Constants.CONNECTION_TIMEOUT, TimeUnit.MILLISECONDS);
okHttp.retryOnConnectionFailure(false);
okHttp.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request.Builder requestBuilder;
Request request = null;
try {
String requestUrl = chain.request().url().toString(); //NPE issue : Attempt to invoke virtual method 'okhttp3.HttpUrl okhttp3.Request.url()' on a null object reference
requestBuilder = chain.request().newBuilder()
.addHeader("hmac", generateHmac(requestUrl))
.addHeader("somemoreHeaders", "values");
if(additionalHeaders != null && !additionalHeaders.isEmpty()) {
Set<Map.Entry<String, String>> entries = additionalHeaders.entrySet();
for (Map.Entry<String, String> header : entries) { …
Run Code Online (Sandbox Code Playgroud) 我搜索了这些问题,但无法解决。请帮我解决这个问题
那是我的 mkdir 代码:
File _sdcardPath = Environment.getExternalStorageDirectory(); // sdcard path is /storage/emulate/0
File _dirPath = new File(_sdcardPath, "CreateFolder");
boolean _isCreate = _dirPath.mkdir();
if (_isCreate) {
tvResult.append(_dirPath + " mkdir success");
} else {
tvResult.append(_dirPath + " mkdir fail");
}
Run Code Online (Sandbox Code Playgroud)
我的 manifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.createfolder"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="21" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
我的设备android版本是:5.1.1,12GB可用空间,代码在5.0下正常运行
在运行应用程序时,我遇到了这个异常: …
可能是因为我无法降级Android Gradle插件版本的原因是什么?
我已更新到Gradle plugin 2.0
现在,我想使用1.5,但我安装的Android Studio说:
> Error:The project is using an incompatible version of the Android
> Gradle plugin. Please update your project to use version 2.1.0
classpath 'com.google.gms:google-services:2.0.0-alpha6'
Run Code Online (Sandbox Code Playgroud)
广告在Google Analytics最新版本中请求,但Gradle无法正常工作,所以我想返回1.5.
这是我的Gradle文件:
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
classpath 'com.google.gms:google-services:2.0.0-alpha6'
}
}
repositories {
mavenCentral()
}
allprojects {
repositories {
jcenter()
}
}
Run Code Online (Sandbox Code Playgroud) 我现在正在学习 Dagger 2,在没有代码的情况下解释问题对我来说太痛苦了,所以让我先列出我所有的模块、组件等:
应用程序类
public class App extends Application {
private ApiComponent mApiComponent = null;
private AppComponent mAppComponent = null;
public ApiComponent getApiComponent() {
if (mApiComponent == null) {
// Dagger%COMPONENT_NAME%
mApiComponent = DaggerApiComponent.builder()
// list of modules that are part of this component need to be created here too
.appModule(new AppModule(this)) // This also corresponds to the name of your module: %component_name%Module
.apiModule(new ApiModule(this))
.build();
}
return mApiComponent;
}
public AppComponent getAppComponent() {
if (mAppComponent == null) {
// …
Run Code Online (Sandbox Code Playgroud)