PHP – 从Web服务器接收数据不起作用(排球库android)
对于获取数据,我使用volley库.当我使用本地地址一切正常.我的活动显示数据.
String json_url = "http://192.168.1.4/android/contactinfo.php"; 但是当我从Web服务器(互联网)获取数据时,我的活动没有显示任何内容,所以它是空的,没有任何错误 String json_url = "http://www.viratebco.com/phpme/3/1.php"; 我比较了这两页的输出,它们完全相同. <?php error_reporting(0); @ini_set('display_errors',0); $host="localhost"; $username="root"; $pwd=""; $db="android"; $con = mysqli_connect($host,$username,$pwd,$db) or die ('unable to connect'); mysqli_set_charset($con,"utf8"); $sql = "SELECT * FROM imageactor"; $result = mysqli_query($con,$sql); $response = array(); while($row = mysqli_fetch_array($result)) { array_push($response,array("Name"=>$row["name"],"Pic"=>$row["pic"],"Description"=>$row["description"])); } header("Connection: Keep-alive"); header("Content-length: 468"); header('Content-type: application/json'); echo json_encode($response,JSON_UNESCAPED_UNICODE); 这是我的服务器获取数据类 public class BackgrundTask { Context context; ArrayList<Contact_actors_list> arrayList = new ArrayList<>(); String json_url = "http://192.168.1.4/phpme/3/1.php"; public BackgrundTask (Context context) { this.context = context; } public ArrayList<Contact_actors_list> getList() { JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.POST,json_url,(String) null,new Response.Listener<JSONArray>() { @Override public void onResponse(JSONArray response) { Log.d("TAG67",response.toString()); int count = 0; while (count<response.length()) { try { // Log.d("TAG67","kk"+count); JSONObject jsonObject = response.getJSONObject(count); // Log.d("TAG67","Pic "+jsonObject.getString("Pic")); // Log.d("TAG67","Description "+jsonObject.getString("Description")); // Log.d("TAG67","Name "+jsonObject.getString("Name")); Contact_actors_list contact_actors_list = new Contact_actors_list(jsonObject.getString("Name"),jsonObject.getString("Pic"),jsonObject.getString("Description")); Log.d("TssssssssAG67",contact_actors_list.getDescription()); arrayList.add(contact_actors_list); count++; } catch (JSONException e) { e.printStackTrace(); Log.e("tageiu","Error at sign in : " + e.getMessage()); } } } },new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { error.printStackTrace(); Log.e("ERtROR123","Error123 "+ error.getMessage()); Log.d("ERtROR123","Error123 "+ error.getMessage()); } } ); int x=4;// retry count jsonArrayRequest.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 48,x,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); MySingleton.getmInstance(context).addToRequestque(jsonArrayRequest); return arrayList; } } 我的MySingleton课程 public class MySingleton { private static MySingleton mInstance; private RequestQueue requestQueue; private static Context mCtx; private MySingleton(Context context){ mCtx = context; requestQueue = getRequestQueue(); } public RequestQueue getRequestQueue() { if (requestQueue==null) { requestQueue = Volley.newRequestQueue(mCtx.getApplicationContext()); } return requestQueue; } public static synchronized MySingleton getmInstance(Context context) { if (mInstance == null) { mInstance = new MySingleton(context); } return mInstance; } public <T> void addToRequestque(Request<T> request) { request.setRetryPolicy(new DefaultRetryPolicy(0,-1,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); requestQueue.add(request); } } 我的actorList页面 public class actorsList extends AppCompatActivity { RecyclerView recyclerView; RecyclerView.Adapter adapter; RecyclerView.LayoutManager layoutManager; ArrayList<Contact_actors_list> arrayList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_actors_list); System.setProperty("http.keepAlive","false"); recyclerView = (RecyclerView) findViewById(R.id.recyclerView); recyclerView.addOnItemTouchListener( new RecyclerItemClickListener(actorsList.this,recyclerView,new RecyclerItemClickListener.OnItemClickListener() { @Override public void onItemClick(View view,int position) { Intent intent = new Intent(actorsList.this,DetailsAsctor.class); Contact_actors_list pp = arrayList.get(position); intent.putExtra("pic",pp.getPic()); intent.putExtra("title",pp.getName()); startActivity(intent); //Toast.makeText(actorsList.this,position,Toast.LENGTH_LONG).show(); } @Override public void onLongItemClick(View view,int position) { Toast.makeText(actorsList.this,"click",Toast.LENGTH_LONG).show(); } }) ); layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); recyclerView.setHasFixedSize(true); BackgrundTask backgroundTask = new BackgrundTask(actorsList.this); arrayList = backgroundTask.getList(); adapter = new RecyclerAdapterActorsList(arrayList); recyclerView.setAdapter(adapter); } } RecyclerAdapterActorsList public class RecyclerAdapterActorsList extends RecyclerView.Adapter<RecyclerAdapterActorsList.MyViewHolder> { ArrayList<Contact_actors_list> arrayList = new ArrayList<>(); public RecyclerAdapterActorsList(ArrayList<Contact_actors_list> arrayList) { this.arrayList = arrayList; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent,int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item_actors_list,parent,false); MyViewHolder myViewHolder = new MyViewHolder(view); return myViewHolder; } @Override public void onBindViewHolder(MyViewHolder holder,int position) { holder.Name1.setText(arrayList.get(position).getName()); holder.Description1.setText(arrayList.get(position).getDescription()); Picasso.with(holder.Pic1.getContext()).load(Uri.parse(arrayList.get(position).getPic())).into(holder.Pic1); } @Override public int getItemCount() { return arrayList.size(); } public static class MyViewHolder extends RecyclerView.ViewHolder { TextView Name1; TextView Description1; ImageView Pic1; public MyViewHolder(View itemView) { super(itemView); Name1 = (TextView) itemView.findViewById(R.id.name); Description1 = (TextView) itemView.findViewById(R.id.description); Pic1 = (ImageView) itemView.findViewById(R.id.pic); } } } 我的应用程序工作正常,但就在我从本地服务获取数据时.
更新:
更新:
创建一个接口 public interface WebResponseListener{ void onReponseReceive(ArrayList <Contact_actors_list> list); } 在BackgrundTask中声明此接口的变量 WebResponseListener listener; public BackgrundTask (Context context,WebResponseListener listener) { this.listener = listener this.context = context; } 使getList()返回void并执行以下更改 public void getList(){ //Where your while condition ends //add following line listener.onReponseReceived(arrayList); ----- } IN actorsList类 public class actorsList extends AppCompatActivity implements WebResponseListener 替换以下行 BackgrundTask backgroundTask = new BackgrundTask(actorsList.this); arrayList = backgroundTask.getList(); 同 BackgrundTask backgroundTask = new BackgrundTask(this,this); arrayList = new ArrayList<>(); adapter = new RecyclerAdapterActorsList(arrayList); recyclerView.setAdapter(adapter); backgroundTask.getList(); 在actorsList类中添加以下方法 public void onReponseReceive(ArrayList <Contact_actors_list> list){ actorsList.this.arrayList.addAll(list); actorsList.this.adapter.notifyDataSetChanged(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |