小编Lam*_*ard的帖子

在android中反序列化JSON字符串

我有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序列化类,希望这对您也有帮助.

java android json

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

Retrofit2中拦截器中的chain.request()返回null

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

android retrofit2

6
推荐指数
0
解决办法
799
查看次数

mkdirs aways 在 Android 5.1 中返回 false

我搜索了这些问题,但无法解决。请帮我解决这个问题

那是我的 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 exception-handling

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

无法降级Android Gradle插件版本

可能是因为我无法降级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)

android android-studio android-gradle-plugin

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

如果没有 @Inject 构造函数或 @Provides- 或 @Produces- 注解的方法,则无法提供 Retrofit

我现在正在学习 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)

android dependency-injection dagger retrofit dagger-2

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