程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在android中解析OkHttp? 你的问题是什么继续你的代码片段使用 Gson 库大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在Android中解析Okhttp你的问题是什么继续你的代码片段使用 Gson 库?

开发过程中遇到在Android中解析Okhttp你的问题是什么继续你的代码片段使用 Gson 库的问题如何解决?下面主要结合日常开发的经验,给出你关于在Android中解析Okhttp你的问题是什么继续你的代码片段使用 Gson 库的解决方法建议,希望对你解决在Android中解析Okhttp你的问题是什么继续你的代码片段使用 Gson 库有所启发或帮助;
        textVIEw = findVIEwByID(R.ID.textVIEww);
    String url = "https://Zenquotes.io/API/random";
    OkhttpClIEnt clIEnt = new OkhttpClIEnt();
    request request = new request.builder()
            .url(url)
            .build();
    clIEnt.newCall(request).enqueue(new CallBACk() {
        @OverrIDe
        public voID onFailure(Call call,IOException E) {
            e.printstacktrace();
        }
        @OverrIDe
        public voID onResponse(Call call,Response responsE) throws IOException {
            if (response.issuccessful()) {
                final String myResponse = response.body().String();
                try {
                    JsONArray Jsonarray = new JsONArray(myResponsE);
                    for(int i=0; i<Jsonarray.length(); i++) {
                        JsONObject obj = Jsonarray.getJsONObject(i);
                        
                    }
                } catch (JsONException E) {
                    e.printstacktrace();
                }
                Quote.this.runOnUiThread(() ->
                        textVIEw.setText(myResponsE));
            }
        }
    });
}

这是我坚持的部分,我认为我在正确的轨道上,但不确定从哪里开始我试图从返回的 url 和“a”信息中获取“q”信息,但它只是输出任何内容建议?

解决方法

你的问题是什么

即使您解析 JSON 字符串,您仍然在 textView.setText() 方法中使用 myResponse 字符串。

继续你的代码片段

你的代码片段很短,但我认为我能理解你的意思。

假设我们有一个名为 MainActivity 的 Activity,在该 Activity 中我们有两个视图,一个名为 TextView,id 为 tv_author_and_quote,一个 Button 的 xml id 为 btn_request_quote。 该按钮有一个 OnClickListener,它调用方法 requestForQuote()。

我们的 onCreate + Button 和 TextView 的变量是这样的

TextView tvAuthorAndQuote;
Button btnrequestQuote;

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

    tvAuthorAndQuote = findViewById(R.id.tv_author_and_quotE);
    btnrequestQuote = findViewById(R.id.btn_request_quotE);

    btnrequestQuote.setOnClickListener(new View.onClickListener() {
        @Override
        public void onClick(View v) {
            requestForQuote();
        }
    });
}

然后我们有一个用于方法 requestForQuote() 的代码:

    public void requestForQuote() {

        OkhttpClient client = new OkhttpClient();
        request request = new request.builder()
                .url(URL)
                .build();
        client.newCall(request).enqueue(new CallBACk() {
            @Override
            public void onFailure(@NotNull Call call,@NotNull IOException E) {
                e.printStackTrace();
            }
            @Override
            public void onResponse(@NotNull Call call,@NotNull Response responsE) throws IOException {
                if (response.issuccessful()) {
                    final String myResponse = Objects.requireNonNull(response.body()).String();
                    String myFormattedQuote = "";
                    try {
                        JSONArray jsonarray = new JSONArray(myResponsE);
                        for(int i=0; i<jsonarray.length(); i++) {
                            JSONObject obj = jsonarray.getJSONObject(i);
                            String quote = obj.getString("q");
                            String author = obj.getString("a");
                            Log.d(tag,"onResponse: quote:" + quotE);
                            Log.d(tag,"onResponse: author:" + author);
                            myFormattedQuote = author + ": " + quote;
                        }
                    } catch (JSONException E) {
                        e.printStackTrace();
                    }
                    final String myFinalQuote = myFormattedQuote;
                    MainActivity.this.runOnUiThread(() -> {
                                if (!myFinalQuote.equals("")) {
                                    tvAuthorAndQuote.setText(myFinalQuotE);
                                } else {
                                    tvAuthorAndQuote.setText(myResponsE);
                                }
                            });

                }
            }
        });
    }

上面的代码基本上使用了您现有的解决方案,但不是使用 myResponse 字符串设置 textView 的文本,而是解析 json 数组并从中获取引用和作者。然后它只是记录它(仅用于测试目的),然后它构造字符串,如果有的话,它会显示给 ,否则它会打印响应。就是这样。

使用 Gson 库

将其导入您的 gradle 依赖项

implementation 'com.google.code.gson:gson:2.8.7'

编写名为Quote

的简短“holder”类
public class Quote {

    public Quote() {
    }

    String q;
    String a;
    String h;

    public String getQ() {
        return q;
    }

    public void setQ(String q) {
        this.q = q;
    }

    public String getA() {
        return a;
    }

    public void setA(String a) {
        this.a = a;
    }

    public String getH() {
        return h;
    }

    public void setH(String h) {
        this.h = h;
    }

    @NonNull
    @NotNull
    @Override
    public String toString() {
        return a + ": " + q;
    }
}

那么 requestForQuote() 方法可能看起来像这样

public void requestForQuoteWithGson() {

        OkhttpClient client = new OkhttpClient();
        request request = new request.builder()
                .url(URL)
                .build();
        client.newCall(request).enqueue(new CallBACk() {
            @Override
            public void onFailure(@NotNull Call call,@NotNull Response responsE) throws IOException {
                if (response.issuccessful()) {
                    final String myResponse = Objects.requireNonNull(response.body()).String();

                    Type listType = new TypeToken<ArrayList<Quote>>(){}.getType();
                    List<Quote> yourClassList = new Gson().fromJson(myResponse,listTypE);

                    if (yourClassList != null && yourClassList.size() > 0) {
                        final Quote quote = yourClassList.get(0);
                        if (quote != null) {
                            myQuotes.add(quotE);
                            MainActivity.this.runOnUiThread(() ->
                                    tvAuthorAndQuote.setText(quote.toString())
                            );
                        }
                    }
                }
            }
        });
    }

大佬总结

以上是大佬教程为你收集整理的在android中解析OkHttp? 你的问题是什么继续你的代码片段使用 Gson 库全部内容,希望文章能够帮你解决在android中解析OkHttp? 你的问题是什么继续你的代码片段使用 Gson 库所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。