Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.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
如何使用Android调用Web服务_Android_Rest_Web Services - Fatal编程技术网

如何使用Android调用Web服务

如何使用Android调用Web服务,android,rest,web-services,Android,Rest,Web Services,我是Android应用程序开发的新手。我正在开发一个购物车应用程序。我正在尝试使用android调用GET方法中的web服务。但是我怎么能做到呢?我试过的就在这里。但是它给了我一个错误PostResponseAsyncTask:405方法不允许。如何解决这个问题?有人能帮我吗?提前谢谢 主片段类 public类MainFragment扩展片段实现异步响应,AdapterView.OnItemClickListener{ 公共静态最终字符串PREFS=“prefFile”; 最终字符串LOG=“M

我是Android应用程序开发的新手。我正在开发一个购物车应用程序。我正在尝试使用android调用GET方法中的web服务。但是我怎么能做到呢?我试过的就在这里。但是它给了我一个错误
PostResponseAsyncTask:405方法不允许
。如何解决这个问题?有人能帮我吗?提前谢谢

主片段类

public类MainFragment扩展片段实现异步响应,AdapterView.OnItemClickListener{
公共静态最终字符串PREFS=“prefFile”;
最终字符串LOG=“MainFragment”;
最终静态字符串url=”http://10.0.3.2:8080/WebService/rest/get/products";
私有ArrayList产品列表;
私有ListView lv;
眼底适配器;
视图;
公共MainFragment(){
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment_main,容器,假);
ImageLoader.getInstance().init(UILConfig.config(MainFragment.this.getActivity());
PostResponseAsyncTask taskRead=新的PostResponseAsyncTask(MainFragment.this.getActivity(),this);
taskRead.execute(url);
返回视图;
}
@凌驾
公共void processFinish(字符串s){
productList=new JsonConverter().toArrayList(s,Products.class);
BindDictionary dic=新的BindDictionary();
dic.addStringField(R.id.tvName,新StringExtractor(){
@凌驾
公共字符串getStringValue(产品项,int位置){
返回item.name;
}
});
dic.addStringField(R.id.tvDesc,新StringExtractor(){
@凌驾
公共字符串getStringValue(产品项,int位置){
退货项目描述;
}
}).visibilityIfNull(View.GONE);
dic.addStringField(R.id.tvPrice,新StringExtractor(){
@凌驾
公共字符串getStringValue(产品项,int位置){
返回“”+项目价格;
}
});
dic.addDynamicImageField(R.id.ivImage,新StringExtractor(){
@凌驾
公共字符串getStringValue(产品项,int位置){
返回item.pic;
}
},新的DynamicImageLoader(){
@凌驾
public void loadImage(字符串url,ImageView img){
//设置图像
ImageLoader.getInstance().displayImage(url,img);
}
});
dic.addBaseField(R.id.btnCart).onClick(新项目ClickListener()){
});
adapter=newfundapter(MainFragment.this.getActivity(),productList,R.layout.product_行,dic);
lv=(ListView)view.findViewById(R.id.lvProduct);
低压设置适配器(适配器);
lv.setOnItemClickListener(本);
}
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
}
}

您正在通过执行此
PostResponseAsyncTask
来执行POST请求,这就是您获得
405方法不允许的原因。如果该端点接受GET,则执行GET请求。最好使用截取改型库进行网络通信。

尝试使用改型、截取、Loopj等库进行异步GET或POST HTTP请求

要从url或文件路径实现动态图像,请使用Piccasso或Glide库

下面是一些关于这些库的示例和文档

洛普
  • 改造
  • 截击
  • 动态图像处理 毕加索

    滑翔

    希望这些能帮助你

    改装示例 build.gradle(应用程序) 主要片段 ApiInterface 基金捕捉器
    class FunDapter扩展了ArrayAdapter{
    私人语境;
    私有ArrayList对象;
    专用静态充气机=空;
    public FunDapter(@NonNull上下文,int资源,@NonNull数组列表对象){
    超级(上下文、资源、对象);
    试一试{
    this.context=上下文;
    this.objects=对象;
    充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
    }捕获(例外e){
    }
    }
    public int getCount(){
    返回objects.size();
    }
    公共产品getItem(产品位置){
    返回位置;
    }
    公共长getItemId(int位置){
    返回位置;
    }
    公共静态类视图持有者{
    公共文本视图显示名称;
    公共文本视图显示单元编号;
    公众形象;
    }
    公共视图getView(int位置、视图转换视图、视图组父视图){
    视图vi=转换视图;
    最终持票人;
    试一试{
    if(convertView==null){
    vi=充气机充气(R.layout.singlerow_mylistview,空);
    holder=新的ViewHolder();
    holder.display_name=(TextView)vi.findViewById(R.id.title_listview);
    holder.display_number=(TextView)vi.findViewById(R.id.subtitle_listview);
    holder.image=(ImageView)vi.findViewById(R.id.icon\u listview);
    vi.setTag(支架);
    }否则{
    holder=(ViewHolder)vi.getTag();
    }
    holder.display_name.setText(objects.get(position.getName());
    holder.display_number.setText(objects.get(position.getPrice());
    毕加索。与(上下文)
    .load(objects.get(position.getPic())
    .调整大小(50,50)
    .centerCrop()
    .插入(支架图像);
    }捕获(例外e){
    }
    返回vi;
    }
    }
    
    别忘了在M中添加
    public class MainFragment extends Fragment implements AsyncResponse, AdapterView.OnItemClickListener{
        public static final String PREFS = "prefFile";
        final String LOG = "MainFragment";
    
        final static String url = "http://10.0.3.2:8080/WebService/rest/get/products";
    
        private ArrayList<Products> productList;
        private ListView lv;
        FunDapter<Products> adapter;
    
        View view;
    
    
        public MainFragment() {
    
        }
    
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
    
            view = inflater.inflate(R.layout.fragment_main, container, false);
    
            ImageLoader.getInstance().init(UILConfig.config(MainFragment.this.getActivity()));
    
            PostResponseAsyncTask taskRead = new PostResponseAsyncTask(MainFragment.this.getActivity(), this);
            taskRead.execute(url);
    
    
            return view;
        }
    
        @Override
        public void processFinish(String s) {
    
            productList = new JsonConverter<Products>().toArrayList(s, Products.class);
    
            BindDictionary dic = new BindDictionary();
    
            dic.addStringField(R.id.tvName, new StringExtractor<Products>() {
                @Override
                public String getStringValue(Products item, int position) {
                    return item.name;
                }
            });
    
            dic.addStringField(R.id.tvDesc, new StringExtractor<Products>() {
                @Override
                public String getStringValue(Products item, int position) {
                    return item.description;
                }
            }).visibilityIfNull(View.GONE);
    
            dic.addStringField(R.id.tvPrice, new StringExtractor<Products>() {
                @Override
                public String getStringValue(Products item, int position) {
                    return ""+item.price;
                }
            });
    
            dic.addDynamicImageField(R.id.ivImage, new StringExtractor<Products>() {
                @Override
                public String getStringValue(Products item, int position) {
                    return item.pic;
                }
            }, new DynamicImageLoader() {
                @Override
                public void loadImage(String url, ImageView img) {
                    //Set image
                    ImageLoader.getInstance().displayImage(url, img);
                }
            });
    
            dic.addBaseField(R.id.btnCart).onClick(new ItemClickListener() {
            });
    
            adapter = new FunDapter<>(MainFragment.this.getActivity(), productList, R.layout.product_row, dic);
            lv = (ListView)view.findViewById(R.id.lvProduct);
            lv.setAdapter(adapter);
    
            lv.setOnItemClickListener(this);
    
        }
    
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
        }
    }
    
            implementation 'com.google.code.gson:gson:2.6.2'
            implementation 'com.squareup.retrofit2:retrofit:2.0.2'
            implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
    
    public class MainFragment extends Fragment {
    
        public static final String PREFS = "prefFile";
        final String LOG = "MainFragment";
    
        private ArrayList<Product> productList;
        private ListView lv;
        FunDapter adapter;
        private ApiInterface apiInterface;
    
        View view;
    
    
        public MainFragment() {
            // Required empty public constructor
        }
    
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            return inflater.inflate(R.layout.fragment_main, container, false);
        }
    
        @Override
        public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
    
    
            lv = (ListView) view.findViewById(R.id.lvProduct);
            apiInterface = ApiClient.getRetrofitApiClient().create(ApiInterface.class);
    
            productList  = new ArrayList<Product>();
    
            adapter= new FunDapter (getContext(), 0, productList);
            lv.setAdapter(adapter);
    
            getProduct();
    
    
        }
    
        private void getProduct() {
    
            Call<List<Product>> call = apiInterface.getProducts();
            call.enqueue(new Callback<List<Product>>() {
                @Override
                public void onResponse(Call<List<Product>> call, Response<List<Product>> response) {
    
                    List<Product> products= response.body();
                    Log.d("TEST", "onResponse: "+response.body().size());
                    if(products.size()>0){
                        productList.addAll(products);
                    }
    
                    adapter.notifyDataSetChanged();
                }
    
                @Override
                public void onFailure(Call<List<Product>> call, Throwable t) {
    
                }
            });
    
        }
    }
    
    import retrofit2.Retrofit;
    import retrofit2.converter.gson.GsonConverterFactory;
    
    /**
     * Created by android on 3/10/17.
     */
    class ApiClient {
    
            public static final String BASE_URL = "http://10.0.2.2:8080/WebService/rest/";
    
            public static Retrofit retrofit = null;
    
            public static Retrofit getRetrofitApiClient() {
                if (retrofit == null) {
                    retrofit = new Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).build();
                }
    
                return retrofit;
            }
        }
    
    import java.util.List;
    
    import retrofit2.Call;
    import retrofit2.http.Body;
    import retrofit2.http.GET;
    import retrofit2.http.POST;
    import retrofit2.http.Query;
    
    
    public interface ApiInterface {
    
        @GET("get/products")
        Call<List<Product>> getProducts();
    
    }
    
    import com.google.gson.annotations.Expose;
    import com.google.gson.annotations.SerializedName;
    
    class Product {
    
        @SerializedName("name")
        @Expose
        private String name;
        @SerializedName("ram")
        @Expose
        private String ram;
        @SerializedName("price")
        @Expose
        private String price;
        @SerializedName("pic")
        @Expose
        private String pic;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getRam() {
            return ram;
        }
    
        public void setRam(String ram) {
            this.ram = ram;
        }
    
        public String getPrice() {
            return price;
        }
    
        public void setPrice(String price) {
            this.price = price;
        }
    
        public String getPic() {
            return pic;
        }
    
        public void setPic(String pic) {
            this.pic = pic;
        }
    
    }
    
    class FunDapter extends ArrayAdapter<Product> {
    
        private Context context;
        private ArrayList<Product> objects;
        private static LayoutInflater inflater = null;
    
        public FunDapter(@NonNull Context context, int resource, @NonNull ArrayList<Product> objects) {
            super(context, resource, objects);
            try {
                this.context = context;
                this.objects = objects;
    
                inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
            } catch (Exception e) {
    
            }
        }
        public int getCount() {
            return objects.size();
        }
    
        public Product getItem(Product position) {
            return position;
        }
    
        public long getItemId(int position) {
            return position;
        }
    
        public static class ViewHolder {
            public TextView display_name;
            public TextView display_number;
            public ImageView image;
    
        }
    
        public View getView(int position, View convertView, ViewGroup parent) {
            View vi = convertView;
            final ViewHolder holder;
            try {
                if (convertView == null) {
                    vi = inflater.inflate(R.layout.singlerow_mylistview, null);
                    holder = new ViewHolder();
    
                    holder.display_name = (TextView) vi.findViewById(R.id.title_listview);
                    holder.display_number = (TextView) vi.findViewById(R.id.subtitle_listview);
                    holder.image = (ImageView) vi.findViewById(R.id.icon_listview);
    
    
    
                    vi.setTag(holder);
                } else {
                    holder = (ViewHolder) vi.getTag();
                }
    
    
    
                holder.display_name.setText(objects.get(position).getName());
                holder.display_number.setText(objects.get(position).getPrice());
    
                Picasso.with(context)
                        .load(objects.get(position).getPic())
                        .resize(50, 50)
                        .centerCrop()
                        .into(holder.image);
    
    
            } catch (Exception e) {
    
    
            }
            return vi;
        }
    }
    
    Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://10.0.3.2:8080/WebService/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    
        SampleInterface request = retrofit.create(SampleInterface.class);
        Call<YourObjectModel> call1=request.getResponse();
        call1.enqueue(new Callback<YourObjectModel>() {
            @Override
            public void onResponse(Call<YourObjectModel> call, Response<YourObjectModel> response) {
                Toast.makeText(MainActivity.this,response.body().toString(),Toast.LENGTH_SHORT).show();
            }
    
            @Override
            public void onFailure(Call<YourObjectModel> call, Throwable t) {
                Toast.makeText(MainActivity.this,t.toString(),Toast.LENGTH_SHORT).show();
            }
    
        });
    
    public interface SampleInterface {
    @GET("rest/get/products")
    Call<YourObjectModel> getResponse();
    }