EX08_12.java
上传用户:vip_99
上传日期:2021-03-27
资源大小:61159k
文件大小:6k
源码类别:

android开发

开发平台:

Java

  1. package irdc.ex08_12;
  2. /* import相关class */
  3. import android.app.Activity;
  4. import android.app.AlertDialog;
  5. import android.content.DialogInterface;
  6. import android.os.Bundle;
  7. import android.view.View;
  8. import android.widget.Button;
  9. import android.widget.EditText;
  10. import java.io.InputStream;
  11. import java.io.OutputStreamWriter;
  12. import java.net.HttpURLConnection;
  13. import java.net.URL;
  14. import javax.xml.parsers.DocumentBuilder;
  15. import javax.xml.parsers.DocumentBuilderFactory;
  16. import org.w3c.dom.Document;
  17. import org.w3c.dom.NodeList;
  18. public class EX08_12 extends Activity
  19. {
  20.   /* 变量声明 */
  21.   Button mButton;
  22.   EditText mEdit1;
  23.   EditText mEdit2;
  24.   EditText mEdit3;
  25.   EditText mEdit4;
  26.   EditText mEdit5;
  27.   /* 乐多博客XML-RPC网址 */
  28.   private String path=
  29.     " http://blog.csdn.net/changshuzi/services/metablogapi.aspx";
  30.   /* XML-RPC发布文章的method name */
  31.   private String method="metaWeblog.newPost";
  32.   @Override
  33.   public void onCreate(Bundle savedInstanceState)
  34.   {
  35.     super.onCreate(savedInstanceState);
  36.     setContentView(R.layout.main);
  37.     /* 初始化对象 */
  38.     mEdit1=(EditText)findViewById(R.id.blogId);
  39.     mEdit2=(EditText)findViewById(R.id.blogAccount);
  40.     mEdit3=(EditText)findViewById(R.id.blogPwd);
  41.     mEdit4=(EditText)findViewById(R.id.artTitle);
  42.     mEdit5=(EditText)findViewById(R.id.artContent);  
  43.     mButton=(Button)findViewById(R.id.myButton);
  44.     /* 设置发布文章的onClick事件 */
  45.     mButton.setOnClickListener(new View.OnClickListener()
  46.     {
  47.       public void onClick(View v)
  48.       {
  49.         /* 取得输入的信息 */
  50.         String blogId=mEdit1.getText().toString();
  51.         String account=mEdit2.getText().toString();
  52.         String pwd=mEdit3.getText().toString();
  53.         String title=mEdit4.getText().toString();
  54.         String content=mEdit5.getText().toString();
  55.         
  56.         if(blogId.equals("")||account.equals("")||pwd.equals("")||
  57.            title.equals("")||content.equals(""))
  58.         {
  59.           showDialog("有字段未填写喔!!");
  60.         }
  61.         else
  62.         {
  63.           /* 发送XML POST并显示Response内容 */
  64.           String outS=getPostString(method,blogId,account,
  65.                                     pwd,title,content);
  66.           String re=sendPost(outS);
  67.           showDialog(re);
  68.         }
  69.       }
  70.     });
  71.   }
  72.   /* 发送request至博客的对应网址的method */
  73.   private String sendPost(String outString)
  74.   {
  75.     HttpURLConnection conn=null;
  76.     String result="";
  77.     URL url = null;   
  78.     try
  79.     {
  80.       url = new URL(path);
  81.       conn = (HttpURLConnection)url.openConnection();
  82.       /* 允许Input、Output */
  83.       conn.setDoInput(true);
  84.       conn.setDoOutput(true);
  85.       /* 设置传送的method=POST */
  86.       conn.setRequestMethod("POST");
  87.       /* setRequestProperty */
  88.       conn.setRequestProperty("Content-Type", "text/xml");
  89.       conn.setRequestProperty("Charset", "UTF-8");
  90.       /* 送出request */
  91.       OutputStreamWriter out = 
  92.         new OutputStreamWriter(conn.getOutputStream(), "utf-8");
  93.       out.write(outString);
  94.       out.flush();
  95.       out.close();
  96.       /* 解析返回的XML内容 */
  97.       result=parseXML(conn.getInputStream());
  98.       conn.disconnect();
  99.     }
  100.     catch(Exception e)
  101.     {
  102.       conn.disconnect();
  103.       e.printStackTrace();
  104.       showDialog(""+e);
  105.     }
  106.     return result;
  107.   }
  108.   /* 解析Response的XML内容的method */
  109.   private String parseXML(InputStream is)
  110.   {
  111.     String result="";
  112.     Document doc = null;
  113.     try
  114.     {
  115.       /* 将XML转换成Document对象 */
  116.       DocumentBuilderFactory dbf=
  117.         DocumentBuilderFactory.newInstance();
  118.       DocumentBuilder db=dbf.newDocumentBuilder();
  119.       doc = db.parse(is);
  120.       doc.getDocumentElement().normalize();
  121.       /* 检查返回值是否有包含fault这个tag,有就代表发布错误 */
  122.       int fault=doc.getElementsByTagName("fault").getLength();
  123.       if(fault>0)
  124.       {
  125.         result+="发布错误!n";
  126.         /* 取得faultCode(错误代码) */
  127.         NodeList nList1=doc.getElementsByTagName("int");
  128.         for (int i = 0; i < nList1.getLength(); ++i)
  129.         {
  130.           String errCode=nList1.item(i).getChildNodes().item(0)
  131.                          .getNodeValue();
  132.           result+="错误代码:"+errCode+"n";
  133.         }
  134.         /* 取得faultString(错误信息) */
  135.         NodeList nList2=doc.getElementsByTagName("string");
  136.         for (int i = 0; i < nList2.getLength(); ++i)
  137.         {
  138.           String errString=nList2.item(i).getChildNodes().item(0)
  139.                            .getNodeValue();
  140.           result+="错误信息:"+errString+"n";
  141.         }
  142.       }
  143.       else
  144.       {
  145.         /* 发布成功,取得文章编号 */
  146.         NodeList nList=doc.getElementsByTagName("string");
  147.         for (int i = 0; i < nList.getLength(); ++i)
  148.         {
  149.           String artId=nList.item(i).getChildNodes().item(0)
  150.                        .getNodeValue();
  151.           result+="发布成功!!文章编号「"+artId+"」";
  152.         }
  153.       }
  154.     }
  155.     catch (Exception ioe) 
  156.     {
  157.       showDialog(""+ioe);
  158.     }
  159.     return result;
  160.   }
  161.   /* 一组要发送的XML内容之method */  
  162.   private String getPostString(String method,String blogId,
  163.       String account,String pwd,String title,String content)
  164.   {
  165.     String s="";
  166.     s+="<methodCall>";
  167.     s+="<methodName>"+method+"</methodName>";
  168.     s+="<params>";
  169.     s+="<param><value><string>"+blogId+"</string></value></param>";
  170.     s+="<param><value><string>"+account+"</string></value></param>";
  171.     s+="<param><value><string>"+pwd+"</string></value></param>";
  172.     s+="<param><value><struct>";
  173.     s+="<member><name>title</name>" +
  174.        "<value><string>"+title+"</string></value></member>";
  175.     s+="<member><name>description</name>" +
  176.        "<value><string>"+content+"</string></value></member>";
  177.     s+="</struct></value></param>";
  178.     s+="<param><value><boolean>1</boolean></value></param>";
  179.     s+="</params>";
  180.     s+="</methodCall>";
  181.     return s;
  182.   }
  183.   
  184.   /* 跳出Dialog的method */
  185.   private void showDialog(String mess)
  186.   {
  187.     new AlertDialog.Builder(EX08_12.this).setTitle("Message")
  188.     .setMessage(mess)
  189.     .setNegativeButton("确定", new DialogInterface.OnClickListener()
  190.     {
  191.       public void onClick(DialogInterface dialog, int which)
  192.       {          
  193.       }
  194.     })
  195.     .show();
  196.   }
  197. }