微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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代码

<?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);

        }
    }


}

我的应用程序工作正常,但就在我从本地服务获取数据时.

更新:

I checked your code everything was at it’s place except
listener.onReponseReceive(arrayList); as mentioned in my answer it
should be right after where while loop ends. Now your recyclerview is
displaying items

更新:

The reason You are not getting the list in your recyclerview is
because it takes some time to fetch response from webserver and your
list get return earlier. In order to Resolve this,Try this

创建一个接口

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类
让你的actorList类实现了这个界面

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();
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口。下面介绍的是其中NATIVE的支付实现流程与PC端实现扫码支付流程
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口。下面介绍的是其中APP的支付的配置与实现流程
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户信息这个功能的开发流程。 配置 1.首先得在微信公众平台申请一下微信小程序账号并获取到小程序的AppID和AppSecret https://mp.weixin.qq.com/cgi-bin/loginpage?url=%2Fwxamp%2F
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一款开源且免费商用的后台开发框架,它基于ThinkPHP和Bootstrap两大主流技术构建的极速后台开发框架,它有着非常完善且强大的功能和便捷的开发体验,使我逐渐喜欢上了它。
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛,就离不开通讯了,然后我就想到了长连接。这里本人用的是GatewayWorker框架。
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口。下面介绍的是其中JSAPI的支付实现流程
服务器优化必备:深入了解PHP8底层开发原理
Golang的网络编程:如何快速构建高性能的网络应用?
Golang和其他编程语言的对比:为什么它的开发效率更高?
PHP8底层开发原理揭秘:如何利用新特性创建出色的Web应用