gpt4 book ai didi

java - 无法从 AsyncTask android 中的 onPostExecute 将值设置为字符串

转载 作者:太空宇宙 更新时间:2023-11-04 12:32:51 25 4
gpt4 key购买 nike

这是从网络读取 json 字符串的类

  {

public class JSONmethod extends AsyncTask<String,String,String>
{

public String result_string;

@Override
protected void onPreExecute() {
super.onPreExecute();

}

@Override
protected String doInBackground(String... params) {
BufferedReader reader = null;
HttpURLConnection connection = null;
StringBuffer buffer;
try {
URL url;
url = new URL(params[0]);
connection = (HttpURLConnection) url.openConnection();
connection.connect();
InputStream stream = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(stream));
String line= "";
buffer = new StringBuffer();
while ((line = reader.readLine())!= null)
{
buffer.append(line);
}
return buffer.toString();

}

catch(MalformedURLException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
finally
{
if (connection != null) {
connection.disconnect();
}
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;

}

@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);


result_string=result;

}



public String result_string_josn()
{
return result_string;
}
}

方法“result_string_json()”返回空字符串

我想经常使用这个类从网络读取 json 字符串

所以我为返回字符串创建了这个方法,该方法将从 onPostExecute 返回

这是我想要通过方法或其他任何东西在执行后生成的值的类

简单.java

 package com.bhatti.bis;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;


public class simple extends Activity {

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

JSONmethod j = new JSONmethod();
j.execute("here is json string");


Toast.makeText(this,j.result_string_josn(),Toast.LENGTH_LONG).show();
}

}

最佳答案

使用EventBus图书馆。它非常易于使用,将完美解决您的问题:

首先为您的事件创建一个简单的类:公共(public)类我的事件{ 私有(private)字符串数据;

public MyEvent(String data) {
this.data = data;
}

public String getData() {
return data;
}

public void setData(String data) {
this.data = data;
}

然后在您的 Activity 或任何位置,注册和取消注册 EventBus,如文档中所述。

现在发布适当的事件:

   @Override
protected void onPostExecute(String result) {
super.onPostExecute(result);

EventBus.getDefault().post(new MyEvent(jsonArray.toString()));
}

您剩下要做的就是在任何您想要的地方监听该事件(在另一个 Activity、Fragment、Service 中 - 这就是 EventBus 的伟大之处):

@Subscribe
public void onMyEvent(MyEvent myEvent){
String data = myEvent.getData();
//do whatever you wish with the text (e.g. make a toast, write it somewhere)
}

关于java - 无法从 AsyncTask android 中的 onPostExecute 将值设置为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37660703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com