在类型的URLConnection方法调用setRequestProperty(字符串,字符串)是不适用的参数(字符串,ArrayList的&其中;字符串&GT) [英] The method setRequestProperty(String, String) in the type URLConnection is not applicable for the arguments (String, ArrayList<String>)

查看:3829
本文介绍了在类型的URLConnection方法调用setRequestProperty(字符串,字符串)是不适用的参数(字符串,ArrayList的&其中;字符串&GT)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想多张图片发送到服务器,但是,所以我存储的所有图像在一个ArrayList中,但在那之后,当我需要发送到服务器,它显示近线错误,, ....... ...............

I am trying to send multiple images to server but,so I am storing all the images in one arraylist,but after that when I need to send to server,it shows error near line ,,......................

 conn.setRequestProperty("image", multimgss); 

错误

The method setRequestProperty(String, String) in the type URLConnection is not applicable for the arguments (String, ArrayList<String>)..

MainActivity

MainActivity

    public int uploadFile(String sourceFileUri) {


      String fileName = sourceFileUri;

      /*String[] mimgs = null;
      mimgs.equals(fileName);*/

      ArrayList<String> multimgss=new ArrayList<String>();
      multimgss.add(fileName);

      System.out.println("multipleimagesss"+multimgss);


    try {
        abcd = new JSONArray(multimgss.toString());
    } catch (JSONException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
      //abcd=multimgss.add(fileName);


      HttpURLConnection conn = null;
      DataOutputStream dos = null;  
      String lineEnd = "\r\n";
      String twoHyphens = "--";
      String boundary = "*****";
      int bytesRead, bytesAvailable, bufferSize;
      byte[] buffer;
      int maxBufferSize = 1 * 1024 * 1024; 
      File sourceFile = new File(sourceFileUri); 

      if (!sourceFile.isFile()) {

           dialog.dismiss(); 

           Log.e("uploadFile", "Source File not exist :"+imagepath);

           runOnUiThread(new Runnable() {
               public void run() {
                   messageText.setText("Source File not exist :"+ imagepath);
               }
           }); 

           return 0;

      }
      else
      {
           try { 


               String cats[]=acTextView.getText().toString().split(",");
               JsonParse jp=new JsonParse();
               for(String cat:cats){
                   List<SuggestGetSet> list =jp.getParseJsonWCF(acTextView.getText().toString());
                for(int i = 0;i<list.size();i++){
                  if(list.get(i).getName().equals(cat))
                      catid.add(list.get(i).getId().toString());
                   //params.add(new BasicNameValuePair("parentid",list.get(i).getId()));


                } 
               }



               catsids=catid.toString();
               pname = proname.getText().toString();
                pskucode = proskucode.getText().toString();
                psalerate=prosalerate.getText().toString();
                ppurchaserate=propurchaserate.getText().toString();
                pweight = proweight.getText().toString();
                pweighttype=proweighttype.getText().toString();
            //  pproactives = proactives.getTag().toString();

                 System.out.println("active nu stauts"+catsids);
            //  pdisporder = prodisporder.getText().toString();
                pdesc = prodesc.getText().toString();

                upLoadServerUri = "http://webistname/web-service/addproduct.php?action=addproduct&name="+pname+"&categoryid="+catsids+"&skucode="+pskucode+"&sale_rate="+psalerate+"&purchase_rate="+ppurchaserate+"&weight="+pweight+"&weighttype="+pweighttype+"&description=hello&image="+abcd;




                 // open a URL connection to the Servlet
               FileInputStream fileInputStream = new FileInputStream(sourceFile);
               URL url = new URL(upLoadServerUri);

               // Open a HTTP  connection to  the URL
               conn = (HttpURLConnection) url.openConnection(); 
               conn.setDoInput(true); // Allow Inputs
               conn.setDoOutput(true); // Allow Outputs
               conn.setUseCaches(false); // Don't use a Cached Copy
               conn.setRequestMethod("POST");
               conn.setRequestProperty("Connection", "Keep-Alive");
               conn.setRequestProperty("ENCTYPE", "multipart/form-data");
               conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);

               conn.setRequestProperty("name", pname);
               conn.setRequestProperty("categoryid", catsids);
               conn.setRequestProperty("skucode", pskucode);
               conn.setRequestProperty("sale_rate", psalerate);
               conn.setRequestProperty("purchase_rate", ppurchaserate);
               conn.setRequestProperty("weight", pweight);
               conn.setRequestProperty("weighttype", pweighttype);
               conn.setRequestProperty("description", "hello");
             //  conn.setRequestProperty("displayorder", pdisporder);
              // conn.setRequestProperty("active", pproactives);
               conn.setRequestProperty("image", abcd.toString()); 


               dos = new DataOutputStream(conn.getOutputStream());

               dos.writeBytes(twoHyphens + boundary + lineEnd); 

               dos.writeBytes("Content-Disposition: form-data; name=\"type\""
                         + lineEnd);
                 dos.writeBytes(lineEnd);

                 // assign value
                 /*dos.writeBytes("version=apps");
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + lineEnd);*/

                 dos.writeBytes("name="+pname);
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + lineEnd);


                 dos.writeBytes("categoryid="+catsids);
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + lineEnd);

                 dos.writeBytes("skucode="+pskucode);
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + lineEnd);

                 dos.writeBytes("sale_rate="+psalerate);
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + lineEnd);

                 dos.writeBytes("purchase_rate="+ppurchaserate);
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + lineEnd);

                 dos.writeBytes("weight="+pweight);
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + lineEnd);

                 dos.writeBytes("weighttype="+pweighttype);
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + lineEnd);

                 dos.writeBytes("description="+"hello");
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + lineEnd);


                /* dos.writeBytes("displayorder="+pdisporder);
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + lineEnd);

                 dos.writeBytes("active="+pproactives);
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + lineEnd);*/



               dos.writeBytes("Content-Disposition: form-data; name=\"image\";filename=\""
                                         + abcd.toString() + "\"" + lineEnd);

               dos.writeBytes(lineEnd);

               // create a buffer of  maximum size
               bytesAvailable = fileInputStream.available(); 

               bufferSize = Math.min(bytesAvailable, maxBufferSize);
               buffer = new byte[bufferSize];

               // read file and write it into form...
               bytesRead = fileInputStream.read(buffer, 0, bufferSize);  

               while (bytesRead > 0) {

                 dos.write(buffer, 0, bufferSize);
                 bytesAvailable = fileInputStream.available();
                 bufferSize = Math.min(bytesAvailable, maxBufferSize);
                 bytesRead = fileInputStream.read(buffer, 0, bufferSize);   

                }

               // send multipart form data necesssary after file data...
               dos.writeBytes(lineEnd);
               dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

               // Responses from the server (code and message)
               serverResponseCode = conn.getResponseCode();
               String serverResponseMessage = conn.getResponseMessage();

               Log.i("uploadFile", "HTTP Response is : "
                       + serverResponseMessage + ": " + serverResponseCode);

               if(serverResponseCode == 200){

                   runOnUiThread(new Runnable() {
                        public void run() {
                            String msg = "File Upload Completed.\n\n See uploaded file here : \n\n"
                                  +" F:/wamp/wamp/www/uploads";
                            messageText.setText(msg);
                            Toast.makeText(MainActivity.this, "File Upload Complete.", Toast.LENGTH_SHORT).show();
                        }
                    });                
               }    

全部code

Fullcode

公共类MainActivity扩展活动实现OnClickListener {

public class MainActivity extends Activity implements OnClickListener {

private static int RESULT_LOAD_IMAGE = 1;
private TextView messageText;
private Button uploadButton;
private ImageView imageview;
private int serverResponseCode = 0;
private ProgressDialog dialog = null;

private String upLoadServerUri = null;
private String imagepath=null;

private EditText proname;
private EditText proskucode;

private EditText prodesc;
//private CheckBox proactives;
private ImageView btnselectpic;

private String pskucode;


private EditText prosalerate;
private EditText propurchaserate;
private EditText proweight;
private EditText proweighttype;
//private EditText prodisporder;
private String pname;
private String psalerate;
private String ppurchaserate;
private String pweight;
private String pweighttype;
private String pproactives;
private String pdisporder;
private String pdesc;
private List<String> catid=new ArrayList<String>();
private AutoCompleteTextView acTextView;
private String catsids;
private Uri selectedImageUri;
private int columnIndex;
private ImageAdapter objImageAdapter;
private GridView gridView;
private JSONArray abcd;
@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    gridView = (GridView) findViewById(R.id.gridview);
    //gridView.setAdapter(new ImageAdapter(this));

    objImageAdapter= new ImageAdapter(this); 
    gridView.setAdapter(objImageAdapter);

    gridView.setOnItemClickListener(new OnItemClickListener() 
    {
        public void onItemClick(AdapterView<?> parent, 
        View v, int position, long id) 
        {                
            Toast.makeText(getBaseContext(), 
                    "pic" + (position + 1) + " selected", 
                    Toast.LENGTH_SHORT).show();
        }
    });        

    acTextView = (AutoCompleteTextView) findViewById(R.id.multautoComplete);
    acTextView.setAdapter(new SuggestionAdapter(this,acTextView.getText().toString()));
  //  acTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());

   proname=(EditText)findViewById(R.id.edt_proname);
    proskucode=(EditText)findViewById(R.id.edt_proskucode);
    prosalerate=(EditText)findViewById(R.id.edt_salerate);
    propurchaserate=(EditText)findViewById(R.id.edt_purchaserate);
    proweight=(EditText)findViewById(R.id.edt_weight);
    proweighttype=(EditText)findViewById(R.id.edt_weighttype);
 //  prodesc=(EditText)findViewById(R.id.edt_desc);
  // prodisporder=(EditText)findViewById(R.id.edt_disporder);
  // proactives=(CheckBox)findViewById(R.id.edt_proactive);

   uploadButton = (Button)findViewById(R.id.btn_addpro);
    messageText  = (TextView)findViewById(R.id.edt_imgs);
    btnselectpic = (ImageView)findViewById(R.id.browsesimgs);
    imageview = (ImageView)findViewById(R.id.imagevw);


    btnselectpic.setOnClickListener(this);
    uploadButton.setOnClickListener(this);

}


@Override
public void onClick(View arg0) {
    if(arg0==btnselectpic)
    {
        /*Intent intent=new Intent(MainActivity.this,PhotoSelection.class);
        startActivity(intent);*/

        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("image/*");
        startActivityForResult(intent, 1);
        /*Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Complete action using"), 1);*/

        /*Intent i = new Intent(Action.ACTION_MULTIPLE_PICK);
        startActivityForResult(i, 200);*/
    }
    else if (arg0==uploadButton) {

         dialog = ProgressDialog.show(MainActivity.this, "", "Uploading file...", true);
         messageText.setText("uploading started.....");
         new Thread(new Runnable() {
             public void run() {            
                  uploadFile(imagepath);                       
             }
           }).start();     
    }

} 

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

     if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
         selectedImageUri= data.getData();
         String[] filePathColumn = { MediaStore.Images.Media.DATA };

         Cursor cursor = getContentResolver().query(selectedImageUri,
                 filePathColumn, null, null, null);
         cursor.moveToFirst();

        /* columnIndex = cursor.getColumnIndex(filePathColumn[0]);
         picturePath = cursor.getString(columnIndex);
         cursor.close();*/

       //  imageView = (ImageView) findViewById(R.id.imgView);
         imageview.setImageBitmap(BitmapFactory.decodeFile(imagepath));

         columnIndex = cursor.getColumnIndex(filePathColumn[0]);
         String picturePath = cursor.getString(columnIndex);
         objImageAdapter.addToList(picturePath);
         cursor.close();
        // addmores.setVisibility(View.VISIBLE);
     }

    /*if (requestCode == 1 && resultCode == RESULT_OK) {
        //Bitmap photo = (Bitmap) data.getData().getPath(); 

        selectedImageUri = data.getData();
        imagepath = getPath(selectedImageUri);
        Bitmap bitmap=BitmapFactory.decodeFile(imagepath);
        imageview.setImageBitmap(bitmap);
        messageText.setText("Uploading file path:" +imagepath);

    }*/
}
     public String getPath(Uri uri) {
            String[] projection = { MediaStore.Images.Media.DATA };
            Cursor cursor = managedQuery(uri, projection, null, null, null);
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        }

     public class ImageAdapter extends BaseAdapter 
     {
   private Context context;
   ArrayList<String> arrayList=new ArrayList<String>();

   public ImageAdapter(Context c) 
   {
       context = c;
   }

   //---returns the number of images---
   public int getCount() {
       return arrayList.size();
   }

   //---returns the ID of an item--- 
   public Object getItem(int position) {
       return position;
   }

   void addToList(String strPath)
   {
       this.arrayList.add(strPath);
       this.notifyDataSetChanged();
   }
   public long getItemId(int position) {
       return position;
   }

   //In this array you have to store all images path which is you want to display in baseapater and must be global to access in baseapater  

   public View getView(int position, View convertView, ViewGroup parent) 
   {
       ImageView imageView;
       if (convertView == null) {
           imageView = new ImageView(context);
           imageView.setLayoutParams(new GridView.LayoutParams(185, 185));
           imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
           imageView.setPadding(5, 5, 5, 5);
       } else {
           imageView = (ImageView) convertView;
       }
       String path = arrayList.get(position);
       Bitmap myBitmap = BitmapFactory.decodeFile(path);
       imageView.setImageBitmap(myBitmap);
       return imageView;
   }
    }    

public int uploadFile(String sourceFileUri) {


      String fileName = sourceFileUri;

      /*String[] mimgs = null;
      mimgs.equals(fileName);*/

      ArrayList<String> multimgss=new ArrayList<String>();
      multimgss.add(fileName);

      System.out.println("multipleimagesss"+multimgss);


    try {
        abcd = new JSONArray(multimgss.toString());
    } catch (JSONException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
      //abcd=multimgss.add(fileName);


      HttpURLConnection conn = null;
      DataOutputStream dos = null;  
      String lineEnd = "\r\n";
      String twoHyphens = "--";
      String boundary = "*****";
      int bytesRead, bytesAvailable, bufferSize;
      byte[] buffer;
      int maxBufferSize = 1 * 1024 * 1024; 
      File sourceFile = new File(sourceFileUri); 

      if (!sourceFile.isFile()) {

           dialog.dismiss(); 

           Log.e("uploadFile", "Source File not exist :"+imagepath);

           runOnUiThread(new Runnable() {
               public void run() {
                   messageText.setText("Source File not exist :"+ imagepath);
               }
           }); 

           return 0;

      }
      else
      {
           try { 


               String cats[]=acTextView.getText().toString().split(",");
               JsonParse jp=new JsonParse();
               for(String cat:cats){
                   List<SuggestGetSet> list =jp.getParseJsonWCF(acTextView.getText().toString());
                for(int i = 0;i<list.size();i++){
                  if(list.get(i).getName().equals(cat))
                      catid.add(list.get(i).getId().toString());
                   //params.add(new BasicNameValuePair("parentid",list.get(i).getId()));


                } 
               }
               catsids=catid.toString();
               pname = proname.getText().toString();
                pskucode = proskucode.getText().toString();
                psalerate=prosalerate.getText().toString();
                ppurchaserate=propurchaserate.getText().toString();
                pweight = proweight.getText().toString();
                pweighttype=proweighttype.getText().toString();
            //  pproactives = proactives.getTag().toString();

                 System.out.println("active nu stauts"+catsids);
            //  pdisporder = prodisporder.getText().toString();
                pdesc = prodesc.getText().toString();

                upLoadServerUri = "http://mywebsitename/web-service/addproduct.php?action=addproduct&name="+pname+"&categoryid="+catsids+"&skucode="+pskucode+"&sale_rate="+psalerate+"&purchase_rate="+ppurchaserate+"&weight="+pweight+"&weighttype="+pweighttype+"&description=hello&image="+abcd;




                 // open a URL connection to the Servlet
               FileInputStream fileInputStream = new FileInputStream(sourceFile);
               URL url = new URL(upLoadServerUri);

               // Open a HTTP  connection to  the URL
               conn = (HttpURLConnection) url.openConnection(); 
               conn.setDoInput(true); // Allow Inputs
               conn.setDoOutput(true); // Allow Outputs
               conn.setUseCaches(false); // Don't use a Cached Copy
               conn.setRequestMethod("POST");
               conn.setRequestProperty("Connection", "Keep-Alive");
               conn.setRequestProperty("ENCTYPE", "multipart/form-data");
               conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);

               conn.setRequestProperty("name", pname);
               conn.setRequestProperty("categoryid", catsids);
               conn.setRequestProperty("skucode", pskucode);
               conn.setRequestProperty("sale_rate", psalerate);
               conn.setRequestProperty("purchase_rate", ppurchaserate);
               conn.setRequestProperty("weight", pweight);
               conn.setRequestProperty("weighttype", pweighttype);
               conn.setRequestProperty("description", "hello");

               conn.setRequestProperty("image", abcd.toString()); 


               dos = new DataOutputStream(conn.getOutputStream());

               dos.writeBytes(twoHyphens + boundary + lineEnd); 

               dos.writeBytes("Content-Disposition: form-data; name=\"type\""
                         + lineEnd);
                 dos.writeBytes(lineEnd);


                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + lineEnd);*/

                 dos.writeBytes("name="+pname);
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + lineEnd);


                 dos.writeBytes("categoryid="+catsids);
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + lineEnd);

                 dos.writeBytes("skucode="+pskucode);
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + lineEnd);

                 dos.writeBytes("sale_rate="+psalerate);
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + lineEnd);

                 dos.writeBytes("purchase_rate="+ppurchaserate);
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + lineEnd);

                 dos.writeBytes("weight="+pweight);
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + lineEnd);

                 dos.writeBytes("weighttype="+pweighttype);
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + lineEnd);

                 dos.writeBytes("description="+"hello");
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + lineEnd);


               dos.writeBytes("Content-Disposition: form-data; name=\"image\";filename=\""
                                         + abcd.toString() + "\"" + lineEnd);

               dos.writeBytes(lineEnd);

               // create a buffer of  maximum size
               bytesAvailable = fileInputStream.available(); 

               bufferSize = Math.min(bytesAvailable, maxBufferSize);
               buffer = new byte[bufferSize];

               // read file and write it into form...
               bytesRead = fileInputStream.read(buffer, 0, bufferSize);  

               while (bytesRead > 0) {

                 dos.write(buffer, 0, bufferSize);
                 bytesAvailable = fileInputStream.available();
                 bufferSize = Math.min(bytesAvailable, maxBufferSize);
                 bytesRead = fileInputStream.read(buffer, 0, bufferSize);   

                }

               // send multipart form data necesssary after file data...
               dos.writeBytes(lineEnd);
               dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

               // Responses from the server (code and message)
               serverResponseCode = conn.getResponseCode();
               String serverResponseMessage = conn.getResponseMessage();

               Log.i("uploadFile", "HTTP Response is : "
                       + serverResponseMessage + ": " + serverResponseCode);

               if(serverResponseCode == 200){

                   runOnUiThread(new Runnable() {
                        public void run() {
                            String msg = "File Upload Completed.\n\n See uploaded file here : \n\n"
                                  +" F:/wamp/wamp/www/uploads";
                            messageText.setText(msg);
                            Toast.makeText(MainActivity.this, "File Upload Complete.", Toast.LENGTH_SHORT).show();
                        }
                    });                
               }    


               fileInputStream.close();
               dos.flush();
               dos.close();

          } catch (MalformedURLException ex) {

              dialog.dismiss();  
              ex.printStackTrace();

              runOnUiThread(new Runnable() {
                  public void run() {
                      messageText.setText("MalformedURLException Exception : check script url.");
                      Toast.makeText(MainActivity.this, "MalformedURLException", Toast.LENGTH_SHORT).show();
                  }
              });

              Log.e("Upload file to server", "error: " + ex.getMessage(), ex);  
          } catch (Exception e) {

              dialog.dismiss();  
              e.printStackTrace();

              runOnUiThread(new Runnable() {
                  public void run() {
                      messageText.setText("Got Exception : see logcat ");
                      Toast.makeText(MainActivity.this, "Got Exception : see logcat ", Toast.LENGTH_SHORT).show();
                  }
              });
              Log.e("Upload file to server Exception", "Exception : "  + e.getMessage(), e);  
          }
          dialog.dismiss();       
          return serverResponseCode; 

       } 
     }

}

推荐答案

调用setRequestProperty 的ArrayList 。 GET JSONArray 的ArrayList 为:

setRequestProperty method only accept String instead of ArrayList . get JSONArray from ArrayList as:

JSONArray jsonArrayImgs=new JSONArray();
 ArrayList<String> multimgss=new ArrayList<String>();
 for (String string : multimgss)
  {
    jsonArrayImgs.put(string);
  }

现在通过 jsonArrayImgs 调用setRequestProperty

conn.setRequestProperty("image", jsonArrayImgs.toString()); 

编辑:

sourceFileUri 。所以更新的getItem 方法适配器:

sourceFileUri is null . so update getItem method as of Adapter:

public String getItem(int position) {
       return arrayList.get[position];
   }

现在里面 onItemClick GridView控件的 ASIGN所选图像路径 sourceFileUri 为:

now inside onItemClick of GridView asign selected image path to sourceFileUri as:

public void onItemClick(AdapterView<?> parent, 
        View v, int position, long id) 
        {                
             imagepath=objImageAdapter.getItem(position);
        }

这篇关于在类型的URLConnection方法调用setRequestProperty(字符串,字符串)是不适用的参数(字符串,ArrayList的&其中;字符串&GT)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆