зачем использовать okhttp3 асинхронный запрос, возвращающий "нуль" в другой класс - PullRequest
0 голосов
/ 13 октября 2018

Класс используется для получения данных и использования System.out.println("First Output:"+string0);, чтобы показать, были ли данные успешно вызваны или нет;

import android.util.Log;

import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class ToGet_Data {

    public  static String string0;


    public  static String loadData() {


        OkHttpClient okHttpClient = new OkHttpClient();
        //构造Request,
        //builder.get()代表的是get请求,url方法里面放的参数是一个网络地址
        Request.Builder builder = new Request.Builder();

        final Map params = new LinkedHashMap();// 请求参数

        Request request = builder.get()
                .url("https://api.avatardata.cn/Jztk/Query?key=15f9ceafeeb94a2492fd84b8c68a554c&subject=4&model=c1&testType=rand")
                .build();
        //3将Request封装成call
        Call call = okHttpClient.newCall(request);

        //4,执行call,这个方法是异步请求数据
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                //失败调用
                Log.e("MainActivity", "onFailure: " );
            }

            @Override
            public void onResponse(Call call, final Response response) throws IOException {
                //成功调用
                Log.e("MainActivity", "onResponse: " );

                //获取网络访问返回的字符串
                string0 = response.body().string();

                System.out.println("First Output:"+string0);

            }
        });

        return string0;
    }

}

это другой класс для отображения данных с использованием объекта, но System.out.println("Second output:="+finalstring); show null;Я знаю, что это не удалось.

package com.example.kaixuan.anull;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ToGet_Data togetdata = new ToGet_Data();
        String finalstring=togetdata.loadData();
        System.out.println("Second output:="+finalstring);
    }
}

Это результат выполнения

...