【发布时间】:2017-10-03 16:33:47
【问题描述】:
我有一个包含回收器视图的片段,我调用 asynctask 将文件从 mysql 加载到回收器视图,我首先在活动上尝试它工作没问题,但是当我用片段替换它时,它不起作用这是我的文件:
BackgroundTask.class
package com.example.harry.recylcerviewdyn;
import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
/**
* Created by FairDz on 19/04/2017.
*/
public class BackgroundTask extends AsyncTask<Void,Promotion,Void>
{
Context ctx;
Activity activity;
RecyclerView recyclerView;
RecyclerView.Adapter adapter;
RecyclerView.LayoutManager layoutManager;
ArrayList<Promotion> arrayList= new ArrayList<>();
public BackgroundTask(Context ctx)
{
this.ctx = ctx;
activity = (Activity) ctx;
}
String json_string ="http://10.0.2.2/promotion_info/get_promotion_details.php";
@Override
protected void onPreExecute()
{
recyclerView = (RecyclerView)activity.findViewById(R.id.recyclerView);
layoutManager = new LinearLayoutManager(ctx);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
adapter = new RecyclerAdapter(arrayList,ctx);
recyclerView.setAdapter(adapter);
}
@Override
protected Void doInBackground(Void... params) {
try {
URL url = new URL(json_string);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();
String line ;
while ((line = bufferedReader.readLine())!= null)
{
stringBuilder.append(line+"\n");
}
httpURLConnection.disconnect();
String json_string = stringBuilder.toString().trim();
JSONObject jsonObject = new JSONObject(json_string);
JSONArray jsonArray = jsonObject.getJSONArray("server_response");
int count = 0;
while (count<jsonArray.length())
{
JSONObject JO = jsonArray.getJSONObject(count);
count++;
Promotion promotion = new Promotion(JO.getInt("id"),JO.getString("nom_supermarche"),JO.getString("logo_supermarche"),JO.getString("nom_produit"),JO.getString("logo_produit"),JO.getDouble("prix"),JO.getDouble("promotion_prix"),JO.getString("description"));
publishProgress(promotion);
}
Log.d("JSON STRING",json_string);
}catch (MalformedURLException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null ;
}
@Override
protected void onProgressUpdate(Promotion... values) {
arrayList.add(values[0]);
adapter.notifyDataSetChanged();
}
}
Fragment.class
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view=inflater.inflate(R.layout.fragment_test, container, false);
BackgroundTask backgroundTask = new BackgroundTask(getActivity());
backgroundTask.execute();
return view;
}
我在网站上搜索了这个问题,我发现了一些在我的项目中不起作用的解决方案,比如直接在 framgen 类中实现 asynctask
【问题讨论】:
-
错误是什么?
-
显示错误日志。
-
Recyclerview 在你的 Activity 或 Fragment 中??共享有错误的 logcat 日志
-
它说“应用程序已停止”
-
@hocinebouhlala 请分享 logcat
标签: android mysql android-fragments android-asynctask