大佬教程收集整理的这篇文章主要介绍了在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 数组并从中获取引用和作者。然后它只是记录它(仅用于测试目的),然后它构造字符串,如果有的话,它会显示给 ,否则它会打印响应。就是这样。
将其导入您的 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,请注明来意。