Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在oncreateview中使用异步任务_Java_Android_Httpurlconnection_Oncreate_Fragment Oncreateview - Fatal编程技术网

Java 在oncreateview中使用异步任务

Java 在oncreateview中使用异步任务,java,android,httpurlconnection,oncreate,fragment-oncreateview,Java,Android,Httpurlconnection,Oncreate,Fragment Oncreateview,有没有办法在oncreateview方法中用异步任务覆盖“week_kg”变量? 异步任务覆盖变量,但视图已创建,且不包含新值 这是一个与Node.js服务器和Mysql数据库的Rest通信 public class Feedback extends Fragment { private RecyclerView mRecylcerView; private RecyclerView.Adapter mAdapter; private RecyclerView.Layou

有没有办法在
oncreateview
方法中用异步任务覆盖“week_kg”变量? 异步任务覆盖变量,但视图已创建,且不包含新值

这是一个与Node.js服务器和Mysql数据库的Rest通信

public class Feedback extends Fragment {
    private RecyclerView mRecylcerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;


    public String username = "ilovenature";

    public double week_kg;

    String resturl = "http://192.168.178.199:3000/"; //ip


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_feedback, container, false);

        new HttpGet().execute(resturl + "user/" + username);

        ArrayList < Feedback_inhalt > feedback_inhalt = new ArrayList<>();
        feedback_inhalt.add(new Feedback_inhalt(R.mipmap.ic_plastic_color, "Verwertungskosten", "kg eingespart", week_kg));


        mRecylcerView = view.findViewById(R.id.feedback_view);
        mRecylcerView.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(this.getActivity());
        mAdapter = new FeedbackAdapter(feedback_inhalt);

        mRecylcerView.setLayoutManager(mLayoutManager);
        mRecylcerView.setAdapter(mAdapter);

        return view;
    }


    public class HttpGet extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String...strURLs) {
            URL url;
            String output;
            HttpURLConnection conn;
            try {
                url = new URL(strURLs[0]);
                conn = (HttpURLConnection) url.openConnection();
                BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                StringBuilder sb = new StringBuilder();
                while ((output = br.readLine()) != null) {
                    sb.append(output);
                }
                return sb.toString();
            } catch (IOException e) {
                return "Unable to retrieve web page. URL may be invalid.";
            }
        }
        @Override
        protected void onPostExecute(String result) {
            try {
                JSONArray jsonArray = new JSONArray(result);

                JSONObject jsonObject = jsonArray.getJSONObject(0);
                week_kg = jsonObject.getDouble("wochenkilogramm");

            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    }

}
公共类反馈扩展片段{
私人回收视图mRecylcerView;
专用回收器查看适配器mAdapter;
private RecyclerView.LayoutManager MLLayoutManager;
公共字符串username=“iloventure”;
公众双周(公斤);;
字符串resturl=”http://192.168.178.199:3000/“;//ip
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragment\u反馈,容器,错误);
新建HttpGet().execute(resturl+“user/”+用户名);
ArrayListFeedback\u inhalt=new ArrayList();
添加新的反馈(R.mipmap.ic塑料颜色,“Verwertungskosten”,“kg eingespart”,week\u kg));
mRecylcerView=view.findviewbyd(R.id.feedback\u视图);
mRecylcerView.setHasFixedSize(true);
mLayoutManager=newlinearlayoutmanager(this.getActivity());
mAdapter=新反馈适配器(反馈接口);
mRecylcerView.setLayoutManager(mLayoutManager);
mRecylcerView.setAdapter(mAdapter);
返回视图;
}
公共类HttpGet扩展异步任务{
@凌驾
受保护的字符串背景(字符串…字符串){
网址;
字符串输出;
httpurl连接连接;
试一试{
url=新url(strURLs[0]);
conn=(HttpURLConnection)url.openConnection();
BufferedReader br=新的BufferedReader(新的InputStreamReader(conn.getInputStream());
StringBuilder sb=新的StringBuilder();
而((output=br.readLine())!=null){
附加(输出);
}
使某人返回字符串();
}捕获(IOE异常){
return“无法检索网页。URL可能无效。”;
}
}
@凌驾
受保护的void onPostExecute(字符串结果){
试一试{
JSONArray JSONArray=新JSONArray(结果);
JSONObject JSONObject=jsonArray.getJSONObject(0);
周_kg=jsonObject.getDouble(“沃肯千克”);
}捕获(JSONException e){
e、 printStackTrace();
}
}
}
}
创建视图时只调用一次
onCreateView()
方法

但是,一旦
AsyncTask
完成执行,就可以刷新
RecyclerView
。为此,请将新获取的数据添加到
ArrayList反馈中,然后在适配器上调用
notifyDataSetChanged()

调用
notifyDataSetChanged()
时,视图将基于ArrayList中的数据进行刷新

因此,在设置了
week\u kg
的值之后,在
onPostExecute()内:

feedback_inhalt.add(new Feedback_inhalt(R.mipmap.ic_plastic_color, "Verwertungskosten", "kg eingespart", week_kg));
mAdapter.notifyDatSetChanged()
最后,只能从UI线程调用
notifyDataSetChanged()
方法,但
onPostExecute()
方法是通过设计在UI线程上运行的,因此您可以选择:-)